2016-01-10 18 views
5

Ich versuche SVG-Rechteck um SVG-Text zu machen. Wenn ich .width() oder .height() auf SVG-Text verwenden möchte, gibt Chrome zurück, was ich erwarte, aber Firefox nicht. Hier ist der Link zu jsfiddle Demo ich gemacht.JQuery Breite und Höhe funktioniert nicht auf SVG in Firefox

$(document).ready(function(){ 
    var $rect = $(document.createElementNS('http://www.w3.org/2000/svg', 'rect')); 
    var x = 50; 
    var y = 50; 
    var fontSize = 10; 
    $rect.attr({ 
     'x' : x, 
     'y' : y, 
     'stroke' : 'black', 
     'stroke-width' : 1, 
     'fill' : 'white' 
    }); 
    $rect.appendTo($("#svgArea")); 

    var $svgText = $(document.createElementNS('http://www.w3.org/2000/svg', 'text')); 
    $svgText.attr({ 
     'x': x, 
     'y': y, 
     'font-family' : 'verdana', 
     'font-weight': 'bold', 
     'font-size' : fontSize 
    }); 

    var node = document.createTextNode("Lorem Ipsum"); 
    $svgText.append(node); 
    $svgText.appendTo($("#svgArea")); 

    var textWidth = $svgText.width(); 
    var textHeight = $svgText.height(); 

    $rect.attr({ 
     'x': x, 
     'y': y - textHeight + 3, 
     'width' : textWidth + 2, 
     'height': textHeight 
    }); 
}); 

html

<svg height="200px" width="200px" id="svgArea"> 
</svg> 

Css

#svgArea{ 
    border: 1px solid black; 
} 
+1

jQuery ist ausschließlich mit HTML-Elementen zu arbeiten. Nur eine begrenzte Anzahl seiner Funktionen wird auf SVG-Elementen funktionieren. –

Antwort

5

JQuery Breite() undHöhe() beruhen letztendlich auf die Eigenschaften und Methoden der Elemente selbst. Chrome implementiert offsetWidth im SVGTextElement-Prototyp, mit dem jquery eine Breite zurückgeben kann. Aber es ist keine Standardeigenschaft und Firefox implementiert es nicht.

Sie können Breite der Svg Textelemente durch die getBBox-Methode zugreifen. Sie können es einfach anstelle von jquery Breite verwenden. Wie folgt aus:

var textWidth = $svgText.get(0).getBBox().width; 
var textHeight = $svgText.get(0).getBBox().height; 

Siehe Ergebnis: http://jsfiddle.net/nj413nbh/1/

See BBox Daten: http://www.w3.org/TR/2011/REC-SVG11-20110816/types.html#__svg__SVGLocatable__getBBox

+0

Ich gues dies wird alle Svg Texte auswählen ... aber kann ich den genauen Text, den ich will? – TomP

+2

Sie können ** $ svgText [0] ** oder ** $ svgText.get (0) ** verwenden, Sie müssen nur auf das SVG-Element von Ihrem jQuery-Objekt zugreifen. –

Verwandte Themen