Mam komponent JavaScript, który zapewni elementowi <svg>
hosta. Chcę wypełnić element SVG przy użyciu d3.js.Tworzenie selekcji d3 na istniejącym, odłączonym elemencie SVG
Jeśli pozwolę d3.js utworzyć element SVG i dodać go do <body>
, następnie wszystko działa zgodnie z oczekiwaniami:
var chart = d3.select('body').append('svg');
Jednak mam już element SVG. Chcę, aby mój kod do bardziej przypominają:
var svg = document.createElement('svg'),
chart = d3.select(svg);
To ostatnie podejście zapełnia element SVG (jak widać w panelu Elementy narzędzi deweloperskich Chrome), ale to nie czyni właściwie.
Czy podchodzę do tego niepoprawnie?
Nie przeszkadza mi to, że d3 tworzy element SVG, o ile nie dołącza go do DOM i mam do niego dostęp.
EDIT Utworzyłem jsFiddle that reproduces my problem. Możesz przełączać zmienną APPROACH
między 1 a 2, aby zobaczyć alternatywne podejścia. Rozumiem ten problem w Chrome i Firefox
EDIT 2 Utworzyłem zrzut ekranu pokazujący pracę i nieprodukcyjnym obok siebie (wersje najnowszej wersji Ubuntu 13.04.):
Możesz zobaczyć, że drzewa elementów są w dużej mierze takie same. Jednak w wersji niepracującej (po lewej) panel Style (po prawej stronie drzewa elementów) brakuje niektórych reguł agenta użytkownika. Nie mam pojęcia, dlaczego to powinno być inne. Sugeruję, że był to błąd w Chrome, ale to samo zachowanie jest widoczne w Firefoksie.
Takie podejście powinno zadziałać - co masz na myśli mówiąc, że nie renderuje się prawidłowo? –
@LarsKotthoff, Stworzyłem [jsFiddle] (http://jsfiddle.net/drewnoakes/JVrPw/) –