DOM 级别有啥区别,它们是如何相互关联的?
Posted
技术标签:
【中文标题】DOM 级别有啥区别,它们是如何相互关联的?【英文标题】:What is the difference in DOM levels, and how do they interrelate?DOM 级别有什么区别,它们是如何相互关联的? 【发布时间】:2013-12-18 12:02:55 【问题描述】:我经常听到“DOM 级别 1”、“DOM 级别 2”、“DOM 级别 3”和“DOM 级别 4”,并意识到我不知道它们之间的区别或它们之间的关系其他。
我知道最基本的 - DOM 是文档对象模型,它为脚本语言(特别是,但据我所知,不限于各种版本的 ECMAScript,例如ECMAScript 5.1)提供访问元素的 html 文档。 (我阅读的一些网站 - 例如dom introduction on quirksmode - 说它适用于任何 XML 文档,但 HTML 是一个足够的子集。)
w3c's DOM technical reports 上的日期似乎暗示每个后续的 DOM 级别都会取代之前的级别。
遗憾的是,我发现提供澄清的最佳参考是 wikipedia,这似乎是相同的 - 标准化部分说后续级别“添加”了额外功能,而没有提到删除任何内容。
现在,我的问题可能很快,但希望能表达我无知的一般状态:
一个 DOM 级别与另一个 DOM 级别的关系是什么? 较低级别的 DOM 是较高级别 DOM 的完整子集吗?随着 DOM 级别的提高,是否删除了任何功能?当我看到像The level 1 DOM will work fine on an HTML document
和 In the Level 1 DOM, each object, whatever it may be exactly, is a Node
之类的陈述(都来自 quirksmode 介绍)时,这是否意味着此类陈述适用于 2、3 和 4 级? (这些都是同一个问题,只是问的方式不同)
引用 DOM 级别真的只是一种简写方式,说明用户代理必须具备何种现代性才能使特定功能正常工作?
显然,我可以从 w3c 的 DOM 技术报告中研究每个规范,但希望从有第一手经验的人那里得到答案。只看changes section of the spec for DOM level 3,我发现从 2 到 3 的大部分更改都是添加,尽管 Node 接口中的一些关键实现已经更改。这些变化是否破坏了任何东西?
下次有人告诉我“哦,那是 DOM 级别 2,所以没关系”时,我想做的不仅仅是明智地点头来自我的研究。
【问题讨论】:
不相关:XHTML 是 XML 的子集,而 HTML 不是,尽管它们非常相似。 +1 有趣的问题,期待答案。 似乎***页面说明了一切。如果每个级别都添加了额外的功能,那么它不会隐式删除任何内容。如果新功能涉及删除以前的功能,那么它仍然需要“添加”该功能(删除或弃用)。 【参考方案1】:首先,我将关联来自MDN's writeup of DOM levels 的消息(强调原文):
过去,DOM 被编写为一组级别。 情况不再如此。这些天它被维护为DOM Living Standard。此页面提供了过去的历史概述。
这在名为“W3C DOM4”的 W3C 文档中得到证实。我们可能会将其理解为“DOM 级别 4”,并假设它增加了一个额外的 DOM 级别,但规范的文本实际上是这样写的:
本文档作为 DOM 生活规范的快照发布。
所以,这是一个历史性的讨论,但仍然值得讨论。
“DOM 级别”是描述 DOM 对象、方法和行为的规范集合。更高级别的 DOM 规范建立在之前的级别之上。变化发生在两个方面:
添加了一个全新的规范类别(例如,第 3 级添加了“验证”和“加载和保存”规范,这在第 2 级中不存在)
对现有规范类别的修改(例如更新“核心”规范)
显然,第一种变化纯粹是加法,而不是减法。第二种变化似乎也几乎完全是附加的,可能是因为 W3C 对保持与以前版本的向后兼容性感兴趣。
不向后兼容的更改往往很少且相当小。例如,您引用的Document.doctype
更改实际上在很大程度上是附加的。 3级加了一句:
对于 HTML 文档,可能会返回 DocumentType 对象,与 HTML 文档中是否存在文档类型声明无关。
当作者省略<!DOCTYPE>
时,这只是提供了更大的灵活性,允许 DOM 实现在 HTML 中添加文档类型。这会破坏的唯一功能是能够以编程方式检测作者指定的文档类型的存在,这似乎并不是特别有价值。
可能您听到有人说“哦,那是 DOM 级别 2,所以没关系”的原因是因为 DOM 级别 2 比 DOM 级别 3 受到更广泛的支持。在某些情况下,这甚至不是旧浏览器支持的问题:Firefox 将其lack of support for the DOM 3's "Load and Save" specification 标记为 WONTFIX。相比之下,所有 2 级规范都得到了现代浏览器的良好支持,并且得到了更老的浏览器的支持(因为 2 级比 3 级早了四年)。
【讨论】:
感谢历史和额外的链接。不知何故,我没想过在我的研究中检查 MDN。我以前没有听说过 W3C Web 超文本应用技术工作组。访问他们的网站很有帮助。【参考方案2】:只是一些关于 DOM4 的注释以添加到 apsillers 的答案中:
... 在 1 级 DOM,每个对象,无论它究竟是什么,都是一个 Node ...,这是否意味着这样的陈述对于 2、3、4级?
这是肯定的。 DOM4 中的属性不是节点。
DOM4 进行了许多重要的非向后兼容更改。如果您不使用 javascript 或鸭子类型语言,则属性不是节点更改是一个很大的变化。此外,XML 文档上的 document.createElement() 将在 http://www.w3.org/1999/xhtml
命名空间中创建元素,其中较早的级别在无命名空间中创建元素。浏览器早就这样做了,但是典型的面向 XML 的 DOM 实现使用的是 DOM3 和更早的方式。如果您在非浏览器上下文中从 DOM3 实现迁移到 DOM4 实现,那将是一个很大的转变。
【讨论】:
以上是关于DOM 级别有啥区别,它们是如何相互关联的?的主要内容,如果未能解决你的问题,请参考以下文章
“影响等级从 2 变为 3”是啥意思?影响级别 2 和级别 3 有啥区别?
Java:对象数组;本地实例和类级别实例有啥区别? [关闭]