。outerHTML中不存在的命名空间属性>

问题描述 投票:1回答:1

在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')节点“知道”它是自己的名称空间,我...

javascript svg dom namespaces xhtml
1个回答
0
投票

由于Robert Longson(非常感谢)和Alohci(甚至更大的感谢)的有益评论,我现在能够回答我自己的问题。

我写了一些代码,说明根据所调用的节点的文档类型,.outerHTML确实会给您带来不同的结果(不是

© www.soinside.com 2019 - 2024. All rights reserved.