2010-04-03 4 views
11

¿Qué es jQuery para Document.createElementNS()?¿Qué es jQuery para 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); 
    } 

El código es un fragmento simplificada de Emle - Electronic Mathematics Laboratory Equipmentemle_lab.js archivo JavaScript.

La función de búsqueda, luf(), asigna una referencia completa a un nombre abreviado para el espacio de nombres en la cadena XPath y createElementNS(). El svg:svg existente se encuentra, se quita y se reemplaza por un nuevo rectángulo.

+0

También necesito saber qué hace createElementNS(). Aquí está mi pregunta relacionada en svg-edit: http://code.google.com/p/svg-edit/issues/detail?id=574 – marknt15

Respuesta

2

Para SVG, he usado Keith Wood's jquery.svg para algunos proyectos de tipo de evaluación.

+3

El svg es solo un ejemplo. Supongo que jquery.svg no es para manejar espacios de nombres distintos de svg. Estoy buscando cómo manejar espacios de nombres con Jquery, específicamente createElementNS(). –

+0

@CWHolemanII Aún no he encontrado una buena manera de hacerlo, aunque siempre puedes trabajar con jquery y usar createElementNS() y setAttributeNS(), como este: http://www.benknowscode.com/2012 /09/using-svg-elements-with-jquery_6812.html –

2

¿Qué es jQuery para Document.createElementNS()?

Eso sería:

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

Así, en el caso de la OP:

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

Pero realmente no mucho se obtuvieron mediante el uso de jQuery para eso, por supuesto. En cualquier caso, siempre se pueden ajustar los nodos DOM en jQuery con, p. Ej. $(rect) después de crear rect con vanilla JS.

Tenga en cuenta que jQuery tiene otros problemas con SVG, como la ruptura viewBox debido a lowercasing attributes, por lo que aún se debe utilizar JS simple para algunos atributos.