在HTML5 / JavaScript中,如果我以编程方式创建命名空间的dom节点,如下所示:
svgElt = document.createElementNS("http://www.w3.org/2000/svg", 'svg')
节点'知道'它是自己的名称空间,我可以这样检索它:
svgElt.namespaceURI // result: "http://www.w3.org/2000/svg"
但是命名空间不被视为“普通”属性:
svgElt.getAttribute('xmlns') // result: null
因此,以编程方式创建的节点的行为不同于等效的“直线”节点的行为
<svg xmlns="http://www.w3.org/2000/svg" id="mySVG"></svg>
.getAttribute
适用于:
document.getElementById('mySVG').getAttribute('xmlns') // result: "http://www.w3.org/2000/svg"
当我使用
.outerHTML
并需要结果中包含名称空间信息时,这是一个潜在的问题。对于以编程方式创建的节点,名称空间信息可能会丢失,因此我可能必须手动添加它。这似乎是“我不必关心”的事情-因此出现了问题。
当您需要通过将图像源设置为数据来将内联SVG节点转换为.outerHTML
时,需要其中包含名称空间信息的this question的示例(请参阅Image
,Hubert OG的答案)。 url,如[]中的
'data:image/svg+xml,' + your_svg_element.outerHTML
我要做的是
svgNode.setAttribute('xmlns', svgNode.namespaceURI)
SVG->图像转换(如我所实现的)没有这个技巧就无法工作;另请参阅我对上面链接的问题的回答。
是否有更好/更优雅的方法?
svgElt.getAttribute('xmlns')
返回null
的目的是什么?缺陷或特征?
在HTML5 / JavaScript中,如果我以编程方式创建一个命名空间的dom节点,例如:svgElt = document.createElementNS(“ http://www.w3.org/2000/svg”,'svg')节点“知道”它是自己的名称空间,我...
由于Robert Longson(非常感谢)和Alohci(甚至更大的感谢)的有益评论,我现在能够回答我自己的问题。
我写了一些代码,说明根据所调用的节点的文档类型,.outerHTML
确实会给您带来不同的结果(不是