什么是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
被定位,删除并替换为新的矩形。
答案 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用于某些评估类型项目。