2010-04-03 10 views
11

Was ist jQuery für Document.createElementNS()?Was ist jQuery für 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); 
    } 

Der Code ist ein vereinfachtes Fragment aus Emle - Electronic Mathematics Laboratory Equipment JavaScript-Datei emle_lab.js. Die Look-Up-Funktion luf() bildet einen vollständigen Verweis auf einen verkürzten Namen für den Namespace in der XPath-Zeichenfolge und createElementNS(). Das vorhandene svg:svg wird lokalisiert, entfernt und durch ein neues Rechteck ersetzt.

+0

Ich muss auch wissen, was createElementNS() tut. Hier ist meine Frage in svg-edit: http://code.google.com/p/svg-edit/issues/detail?id=574 – marknt15

Antwort

2

Für SVG, habe ich Keith Wood's jquery.svg für einige Projekte des Evaluierungstyps verwendet.

+3

Die Svg ist nur ein Beispiel. Ich nehme an, jquery.svg ist nicht für die Behandlung von Namespaces anders als Svg. Ich suche nach dem Umgang mit Namespaces mit Jquery, insbesondere createElementNS(). –

+0

@CWHolemanII Ich habe noch keinen guten Weg gefunden, dies zu tun, obwohl Sie immer Arbeit um jQuery bekommen und createElementNS() und setAttributeNS() selbst verwenden können, wie folgt: http://www.benknowscode.com/2012 /09/using-svg-elements-with-jquery_6812.html –

2

Was ist jQuery für Document.createElementNS()?

Das wäre:

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

So im Fall des OP:

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

aber nicht wirklich viel von mit jQuery für das natürlich gewonnen wird. In jedem Fall kann man immer DOM-Knoten in jQuery mit z. $(rect) nach dem Erstellen rect mit Vanille JS.

Beachten Sie, dass jQuery andere Probleme mit SVG hat, z. B. viewBox wegen lowercasing attributes zu brechen, so muss für einige Attribute noch plain JS verwendet werden.