createElement 与 createElementNS
这两者之间真正的区别是什么?我的意思是真正的、本质的区别。 常规 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 规范。但我还是很困惑。
What's the real difference between those two? I mean real, essential difference.
What's the future holding for regular createElement
?
Svg is xml, not html. I get that. So we use createElementNS(ns_string, 'svg')
And then setAttributeNS(null,,)
. Why?
Why not setAttributeNS('my_ns',,)
?
Why must ns_string
be http://www.w3.org/2000/svg
and not some random string? What's the purpose of a namespace if there is only one namespace?
What's the purpose of ns
in regular html? Should I change all instances of createElement
to createElementNS
in my existing code?
I am reading the DOM-Level-2 spec. but I'm still puzzled.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要了解命名空间试图解决的问题,请考虑文件扩展名。 3 个字母的文件扩展名在描述文件内容方面做得非常糟糕。它们是不明确的并且不携带版本信息。 XML 命名空间使用更大的字符串、URI 空间来解决相同的问题,并使用短前缀,以便您可以在同一文档中简洁地混合多种 XML。
有许多名称空间用于标识不同类型的 XML 以及这些类型的不同版本。
SVG 和 MathML 是两种 XML,每种都有自己的命名空间,可以嵌入到 HTML5 中,并且它们经常使用 XLink(另一个 XML 命名空间)。许多其他 XML 模式以及相应的命名空间用于在客户端和服务器之间传递消息以及数据存储。
XHTML 试图将 HTML 表达为有效的 XML。它有自己的命名空间。
在将
createElementNS
与命名空间 URI 一起使用时,您可能应该尝试始终将setAttributeNS
与命名空间 URI 一起使用。XML 是通过多个步骤定义的。该规范的第一个版本没有提及命名空间,但留下了足够的语法,以便可以通过使用前缀和特殊的
xmlns
属性在没有命名空间的 XML 之上指定具有命名空间的 XML。 XML 规范 指出:XML 命名空间让 XML 处理应用程序知道它们正在处理什么,并允许多种 XML 在同一个文档中混合在一起。
这包括SVG 版本标准化的年份是 2000 年,因此它包含有用的信息。
当与
xmlns:svg
一起使用时,它还可以让浏览器知道svg:
前缀表示 SVG 而不是 XML 的其他方言。To understand the problem namespaces are trying to solve, consider file extensions. 3-letter file extensions have done a really bad job of describing the content of files. They're ambiguous and don't carry version info. XML namespaces use a larger space of strings, URIs, to solve the same problem, and use short prefixes so you can succinctly mix multiple kinds of XML in the same document.
There are many namespaces used to identify different kinds of XML, and different versions of those kind.
SVG and MathML are two kinds of XML each with their own namespaces that can be embedded in HTML5, and they often use XLink, another XML namespace. Many other XML schemas, with corresponding namespaces, are used for passing messages between clients and servers and for data storage.
XHTML is an attempt to express HTML as valid XML. It has its own namespace.
You should probably try to consistently use
setAttributeNS
with a namespace URI when usingcreateElementNS
with a namespace URI.XML was defined in multiple steps. The first version of the spec said nothing about namespaces but left enough syntax so that XML with namespaces could be specified on top of XML without namespaces by using prefixes and special
xmlns
attributes. The XML specification says:XML namespaces let XML processing applications know what they're dealing with, and allow multiple kinds of XML to be mixed together in the same document.
This includes the year that version of SVG was standardized, 2000, so it carries useful information.
When used with
xmlns:svg
it also lets the browser know that thesvg:
prefix means SVG and not some other dialect of XML.