2010-04-03 5 views
11

Che cos'è jQuery per Document.createElementNS()?Che cos'è jQuery per 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); 
    } 

Il codice è un frammento semplificato da Emle - Electronic Mathematics Laboratory Equipment file JavaScript emle_lab.js.

La funzione di ricerca, luf(), associa un riferimento completo a un nome di riduzione per lo spazio dei nomi nella stringa XPath e createElementNS(). L'attuale svg:svg si trova, rimosso e sostituito da un nuovo rettangolo.

+0

Devo anche sapere cosa fa createElementNS(). Ecco la mia domanda correlata in svg-edit: http://code.google.com/p/svg-edit/issues/detail?id=574 – marknt15

risposta

2

Per SVG, ho utilizzato Keith Wood's jquery.svg per alcuni progetti di tipo di valutazione.

+3

La svg è solo un esempio. Presumo jquery.svg non è per la gestione di spazi dei nomi diversi da svg. Sto cercando come gestire gli spazi dei nomi con Jquery, in particolare createElementNS(). –

+0

@CWHolemanII Non ho ancora trovato un buon modo per farlo, sebbene tu possa sempre lavorare su jquery e usare createElementNS() e setAttributeNS() tu stesso, come questo: http://www.benknowscode.com/2012 /09/using-svg-elements-with-jquery_6812.html –

2

Che cos'è jQuery per Document.createElementNS()?

Quello sarebbe:

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

Quindi, nel caso del PO:

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

Ma non molto è davvero guadagnato utilizzando jQuery per questo, naturalmente. In ogni caso, si può sempre avvolgere i nodi DOM in jQuery con ad es. $(rect) dopo aver creato rect con JS vaniglia.

Si noti che jQuery ha altri problemi con SVG, come la rottura di viewBox a causa di lowercasing attributes, quindi JS semplice deve ancora essere utilizzato per alcuni attributi.