2010-04-03 48 views
11

Co to jest jQuery dla Document.createElementNS()?Co to jest jQuery dla Document.createElementNS()?

function emleGraphicToSvg(aGraphicNode) { 
    var lu = function luf(aPrefix){ 
    switch (aPrefix){ 
     case 'xhtml': return 'http://www.w3.org/1999/xhtml'; 
     case 'math': return 'http://www.w3.org/1998/Math/MathML'; 
     case 'svg': return 'http://www.w3.org/2000/svg'; 
     } 
    return ''; 
    }; 
    var svg = document.evaluate("svg:svg", 
    aGraphicNode, lu, XPathResult.FIRST_ORDERED_NODE_TYPE, null). 
    singleNodeValue; 
    $(svg).children().remove(); 
    rect = document.createElementNS(lu('svg'), "rect"); 
    rect.setAttribute("x", "35"); 
    rect.setAttribute("y", "25"); 
    rect.setAttribute("width", "200"); 
    rect.setAttribute("height", "50"); 
    rect.setAttribute("class", "emleGraphicOutline"); 
    svg.appendChild(rect); 
    } 

Kod jest uproszczony fragment Emle - Electronic Mathematics Laboratory Equipment plik JavaScript emle_lab.js.

Funkcja wyszukiwania, luf(), odwzorowuje kompletne odniesienie do skróconej nazwy obszaru nazw w ciągu XPath i createElementNS(). Istniejący svg:svg znajduje się, usuwa i zastępuje nowym prostokątem.

+0

Muszę również wiedzieć, co robi createElementNS(). Oto moje pokrewne pytanie w svg-edit: http://pl.google.com/p/svg-edit/issues/detail?id=574 – marknt15

Odpowiedz

2

Dla SVG użyłem Keith Wood's jquery.svg dla niektórych projektów typu oceny.

+3

svg to tylko przykład. Zakładam, że jquery.svg nie służy do obsługi przestrzeni nazw innych niż svg. Szukam sposobu obsługi przestrzeni nazw za pomocą Jquery, w szczególności createElementNS(). –

+0

@CWHolemanII Nie znalazłem jeszcze dobrego sposobu, aby to zrobić, chociaż zawsze możesz uzyskać pracę wokół jquery i korzystać z funkcji createElementNS() i setAttributeNS(), na przykład: http://www.benknowscode.com/2012 /09/using-svg-elements-with-jquery_6812.html –

2

Co to jest jQuery dla Document.createElementNS()?

To byłoby:

$(document.createElementNS('namespace', 'tag')) 

Tak więc w przypadku PO za:

rect = $(document.createElementNS(lu('svg'), 'rect')) 
    .addClass('emleGraphicOutline') 
    .attr({ 
     x: 35, 
     y: 25, 
     width: 200, 
     height: 50 
    }); 

Ale nie jest naprawdę dużo zyskał za pomocą jQuery do tego, oczywiście. W każdym przypadku można zawsze owijać węzły DOM w jQuery za pomocą np. $(rect) po utworzeniu rect z vanilla JS.

Należy zauważyć, że jQuery ma inne problemy z SVG, takie jak zerwanie viewBox z powodu lowercasing attributes, więc oczywisty JS musi nadal być używany dla niektórych atrybutów.