2012-02-14 15 views
16

Próbuję dodać element tekstowy do elementu <g> w dokumencie SVG przy użyciu javascript mój kod wygląda następującododawanie tekstu do dokumentu SVG w javascript

function addText(x,y,val){ 
var newtxt = document.createElementNS("http://www.w3.org/2000/svg", "text"); 
$newtxt = $(newtxt); 
$newtxt.attr('x',x); 
$newtxt.attr('y',y); 
$newtxt.attr('font-size','100'); 
$newtxt.val(val); 

$newtxt.appendTo($('g'));} 

ale kiedy go uruchomić tekst jest nie pokazany. element jest dodawany do elementu <g>, ale wartość nie jest ustawiona .. wszelkie pomysły, jak rozwiązać ten problem?

Odpowiedz

40

Myślę, że trzeba utworzyć węzeł tekstowy, aby przytrzymać ciąg znaków i dołączyć go do elementu tekstowego SVG.

var newText = document.createElementNS(svgNS,"text"); 
newText.setAttributeNS(null,"x",x);  
newText.setAttributeNS(null,"y",y); 
newText.setAttributeNS(null,"font-size","100"); 

var textNode = document.createTextNode(val); 
newText.appendChild(textNode); 
document.getElementById("g").appendChild(newText); 

Istnieje działający przykład pod adresem http://www.carto.net/svg/manipulating_svg_with_dom_ecmascript/.

+0

Sprawdziłem, czy jest to poprawne. (Użycie createTextNode.) Powinno zostać oznaczone jako odpowiedź. –

+1

Zastanawiam się, dlaczego tak naprawdę są tak skomplikowane. – FlorianB

2
var txt = document.createElementNS(svgNS, 'text'); 
txt.setAttributeNS(null, 'x', x); 
txt.setAttributeNS(null, 'y', y); 
txt.setAttributeNS(null,'font-size','100'); 
txt.innerHTML = val; 
document.getElementById("g").appendChild(txt); 
+1

Ten fragment kodu może rozwiązać pytanie, [w tym wyjaśnienie] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-ans -answers) naprawdę pomaga aby poprawić jakość twojego posta. Pamiętaj, że odpowiadasz na pytanie przeznaczone dla czytelników w przyszłości, a te osoby mogą nie znać powodów sugestii dotyczących kodu. Proszę również nie tłumić kodu za pomocą komentarzy wyjaśniających, ponieważ zmniejsza to czytelność zarówno kodu, jak i objaśnień! – FrankerZ

+0

dzięki za proste rozwiązanie problemu –