什么是jQuery for Document.createElementNS()?

时间:2010-04-03 18:54:34

标签: jquery xml-namespaces

什么是jQuery for 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);
  }

代码是来自Emle - Electronic Mathematics Laboratory Equipment JavaScript文件emle_lab.js的简化片段。

查找函数luf()将完整引用映射到XPath字符串和createElementNS()中命名空间的缩写名称。现有的svg:svg被定位,删除并替换为新的矩形。

2 个答案:

答案 0 :(得分:3)

  

什么是jQuery for Document.createElementNS()?

那将是:

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

所以在OP的情况下:

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

但是当然,使用jQuery实际上并没有多少收获。在任何情况下,总是可以在jQuery中用DOM封装DOM节点。用vanilla JS创建$(rect)之后rect

请注意,jQuery还存在SVG的其他问题,例如因lowercasing attributes而导致viewBox中断,因此必须使用普通JS来处理某些属性。

答案 1 :(得分:2)

对于SVG,我已将Keith Wood's jquery.svg用于某些评估类型项目。