2012-12-19 17 views
6

jQuery jest przeznaczony do użycia na stronach HTML z JavaScript.jQuery z dokumentem SVG

SVG używa tego samego DOM Level 2 jako HTML, ale jest oparty na XML i określa ECMAScript.

Jakie problemy może wyniknąć z używania jQuery z SVG? Czy byłoby lepiej umieścić taki SVG jako element w dokumencie HTML?

Uwaga, nie mam na myśli biblioteki rysunkowej "jQuery SVG", która umożliwia manipulowanie elementem SVG w dokumencie HTML jako port graficzny przy użyciu składni jQuery. Chcę tylko użyć selektorów jQuery i zarządzania zdarzeniami na elementach SVG, przy czym korzeń SVG może znajdować się wewnątrz HTML, a może nie.

+0

Re: zamieszanie w stosunku do javascript vs ecmascript, patrz np. Http://stackoverflow.com/questions/912479/what-is-the-difference-between-javascript-and-ecmascript. –

+0

Możliwy duplikat: http://stackoverflow.com/questions/2294801/jquery-under-svg. W każdym razie, dlaczego nie po prostu wypróbować D3.js? D3 ma zarówno łatwe wiązania zdarzeń, jak i selektory. Zwłaszcza, że ​​nie wydajesz się zbyt zaniepokojony przeglądarkami, które nie obsługują SVG. –

+0

@ ErikDahlström Ooh, dzięki! – Potatoswatter

Odpowiedz

2

Próbuję, selektory wydają się działać, ale inne rzeczy nie. Idiom $(function() { }) do inicjowania strony nie działa, ponieważ SVG przekazuje tylko zdarzenie SVGLoad do najwyższego elementu <svg>. $('svg').bind('SVGLoad', function(){}) działa jednak.

Dynamiczne dodawanie elementów za pomocą .append umieszcza je w DOM w taki sposób, że nie są renderowane, przynajmniej w Firefoksie. Elementy fantomowe pozostają niewidoczne nawet po ponownym renderowaniu dokumentu, w tym element dynamicznie dodawany bez jQuery. $().attr(key, value) może zmienić atrybut, ale nie zaktualizuje ekranu.

Wszystko wydaje się niestety zepsute. Więcej funkcji działa po osadzeniu w dokumencie XHTML. Ale defekty, takie jak powyższe, pozostają i prawdopodobnie lepiej jest użyć innej struktury. Może dać jQuery SVG kolejny wygląd ...