createElement与createElementNS

时间:2011-11-17 19:40:36

标签: javascript html5 dom namespaces

这两者之间真正的区别是什么?我的意思是真正的本质区别。 常规createElement的未来是什么?

Svg是xml,而不是html。我明白了。所以我们使用createElementNS(ns_string, 'svg') 然后setAttributeNS(null,,)。为什么? 为什么不setAttributeNS('my_ns',,)

为什么ns_string必须是http://www.w3.org/2000/svg而不是一些随机字符串?如果只有一个命名空间,命名空间的目的是什么?

常规HTML中ns的目的是什么?我应该在现有代码中将createElement的所有实例更改为createElementNS吗?

我正在阅读DOM-Level-2规范。但我仍然感到困惑。

1 个答案:

答案 0 :(得分:45)

要了解命名空间试图解决的问题,请考虑文件扩展名。 3个字母的文件扩展名在描述文件内容方面做得非常糟糕。它们含糊不清,不带版本信息。 XML名称空间使用更大的字符串,URI来解决相同的问题,并使用简短的前缀,因此您可以在同一文档中简洁地混合多种XML。

  

如果只有一个名称空间,命名空间的目的是什么?

有许多名称空间用于标识不同类型的XML,以及这些类型的不同版本。

SVG和MathML是两种XML,每种都有自己的命名空间,可以嵌入HTML5中,并且它们经常使用另一个XML命名空间XLink。许多其他具有相应命名空间的XML模式用于在客户端和服务器之间传递消息以及用于数据存储。

XHTML尝试将HTML表达为有效的XML。它有自己的命名空间。

  

所以我们使用createElementNS(ns_string,'svg')然后使用setAttributeNS(null ,,)。为什么?为什么不setAttributeNS('my_ns',,)???

在将setAttributeNS与名称空间URI一起使用时,您应该尝试使用createElementNS一致地使用名称空间URI。

XML是通过多个步骤定义的。该规范的第一个版本没有提及名称空间,但留下了足够的语法,以便通过使用前缀和特殊xmlns属性,可以在没有名称空间的XML上指定具有名称空间的XML。 XML specification说:

  

“XML建议书中的命名空间[XML名称]为包含冒号字符的名称赋予了含义。因此,除了名称空间之外,作者不应在XML名称中使用冒号,但XML处理器必须接受冒号作为名称字符。 “

XML命名空间让XML处理应用程序知道它们正在处理什么,并允许多种XML在同一文档中混合在一起。

  

为什么ns_string必须是“http://www.w3.org/2000/svg

这包括SVG版本标准化的年份,2000年,因此它带有有用的信息。

当与xmlns:svg一起使用时,它也让浏览器知道svg:前缀意味着SVG,而不是其他一些XML方言。