Javascript 为什么赢了';如果不通过CreateElements处理,动态SVG将无法工作

Javascript 为什么赢了';如果不通过CreateElements处理,动态SVG将无法工作,javascript,svg,namespaces,Javascript,Svg,Namespaces,我试图在纯JS中操作SVG,发现如果不使用createElements和setAttributeNS之类的方法,SVG的行为就不会像预期的那样 <svg id="mydsvg" width="100" height="100"> <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" /> </svg> 但是如果您使用createElements和setAt

我试图在纯JS中操作SVG,发现如果不使用
createElements
setAttributeNS
之类的方法,SVG的行为就不会像预期的那样

<svg id="mydsvg" width="100" height="100">
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>
但是如果您使用
createElements
setAttributeNS
,它将按预期工作


最糟糕的是,
createElement
createElements
都创建相同的DOM文本。

这不起作用,因为规范规定SVG元素必须存在于SVG命名空间中,而createElement在html命名空间中创建元素。否则,解析器如何知道您是要创建一个与src属性一起工作的html
元素,还是一个需要`xlink:href属性的SVG
元素

在名称空间未序列化的html中,情况看起来是一样的。在序列化名称空间的XML中,名称空间不会被序列化

html中的SVG如下所示

<svg id="mydsvg" width="100" height="100">
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>

作为独立文档的SVG如下所示

<svg xmlns="https://www.w3.org/2000/svg" id="mydsvg" width="100" height="100">
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>


圆继承其父对象的名称空间。

它不起作用,因为规范规定SVG元素必须存在于SVG名称空间中,createElement在html名称空间中创建元素。否则,解析器如何知道您是要创建一个与src属性一起工作的html
元素,还是一个需要`xlink:href属性的SVG
元素

在名称空间未序列化的html中,情况看起来是一样的。在序列化名称空间的XML中,名称空间不会被序列化

html中的SVG如下所示

<svg id="mydsvg" width="100" height="100">
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>

作为独立文档的SVG如下所示

<svg xmlns="https://www.w3.org/2000/svg" id="mydsvg" width="100" height="100">
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>


圆继承其父对象的名称空间。

真正完整的答案。谢谢如果你能为最后一句话展示一个小的代码示例,这将非常有用。真正完整的答案。谢谢如果您能为最后一句显示一个小的代码示例,这将非常有用。