2013-05-22 10 views
6

że chcę programowo wstawić dodatkowy <tspan> w elemencie <text> w poniższej SVG:Dlaczego nie zostały narysowane programowo elementy SVG <tspan>, z wyjątkiem d3.js?

<svg width="300" height="500"> 
    <text x="50" y="100"> 
     <tspan x="50">one</tspan> 
     <tspan x="50" dy="20">two</tspan> 
     <tspan x="50" dy="20">three</tspan> 
    </text> 
</svg> 

To można zrobić z, między innymi, czysty JavaScript (.appendChild), jQuery (.append) i d3 .js (.append). Jednak, chociaż wszystkie trzy metody z powodzeniem wstawić element, mogę tylko wydają się dostać do faktycznie wyświetlić gdy jest włożona przez d3.js:

Zobacz zmniejszoną sprawę w tym skrzypce: http://jsfiddle.net/2NLJY/.

Zachowanie jest spójne w testowanych przeglądarkach: Firefox, Chrome i Safari (wszystkie OS X 10.8).

Co się tutaj dzieje?

Odpowiedz

10

Nie można użyć createElement do tworzenia elementów SVG. SVG elementy muszą być tworzone w przestrzeni nazw SVG więc trzeba napisać

document.createElementNS("http://www.w3.org/2000/svg", "tspan"); 

Jest jquery plugin która podnosi funkcjonalność jQuery pozwalając elementy SVG ma zostać utworzony.

+0

To ma sens. Naprawienie, które właśnie doprowadziło mnie z powrotem do faktycznego problemu, który próbowałem zbadać tutaj: dlaczego są ignorowane (czasami) atrybuty 'dy' podczas wstawiania' 'elementów programowo? http://jsfiddle.net/2NLJY/1/ To nawet nie wygląda tak samo w Safari, tak jak w przeglądarce Chrome i Firefox ... – serhalp

+2

@serhalp, to kolejne pytanie. Powinieneś awansować i/lub zaakceptować odpowiedź powyżej. – mccannf

+0

Choć przydatne, to tylko częściowo odpowiada na moje pytanie. Utworzenie elementu za pomocą createElementNS, jak podano, nie wyświetla '' w oczekiwanej lokalizacji. – serhalp

Powiązane problemy