createElement与createElementNS

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

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

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

ns在普通html中的用途是什么? 我是否应该将现有代码中的createElement所有实例更改为createElementNS

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

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

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

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

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

XHTML是试图将HTML表示为有效的XML。 它有自己的名字空间。

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

当使用具有名称空间URI的createElementNS ,您应该尝试一致地使用带有名称空间URI的setAttributeNS

XML是在多个步骤中定义的。 该规范的第一个版本没有提到任何有关命名空间的内容,但留下了足够的语法,以便可以在不使用名称空间的情况下使用前缀和特殊的xmlns属性在XML之上指定带有名称空间的XML。 XML规范说:

“XMLbuild议[Names Names]中的命名空间为包含冒号字符的名称赋予了一个含义,因此作者不应该在XML名称中使用冒号,除了命名空间的目的,但是XML处理器必须接受冒号作为名字。

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

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

这包括SVG版本在2000年被标准化的那一年,所以它包含有用的信息。

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