这两者之间真正的区别是什么?我的意思是真正的本质区别。
常规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规范。但我仍然感到困惑。
答案 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方言。