javascript - DOM 级别有何不同,它们之间如何相互关联?

标签 javascript html xml dom xhtml

我经常听到“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 级别的提高,是否删除了任何功能?当我看到像 The level 1 DOM will work fine on an HTML document在 Level 1 DOM 中,每个对象,无论它是什么,都是一个节点(都来自 quirksmode 介绍),这是否意味着此类陈述适用于 2、3 和 4 级? (这些都是同一个问题,只是问的方式不同)
  • 引用 DOM 级别真的只是一种简写方式,说明用户代理必须有多现代才能使特定功能发挥作用?

显然,我可以研究 w3c 的 DOM 技术报告中的每个规范,但希望从那些有第一手经验的人那里得到答案。只需看一眼 changes section of the spec for DOM level 3 ,我看到从 2 到 3 的大部分更改都是添加,尽管 Node 接口(interface)中的一些关键实现已经更改。这些更改是否破坏了任何内容?

下次有人告诉我“哦,那是 DOM 级别 2,所以没关系”时,我想做的不仅仅是明智的点头,所以欢迎任何我遗漏的引用资料或我没有收集到的第一手信息来 self 的研究。

最佳答案

首先,我将关联一条来自 MDN's writeup of DOM levels 的消息(强调原文):

The DOM used to be written as a set of levels. That is no longer the case. These days it is maintained as the DOM Living Standard. This page provides an historical overview of the olden days.

这在名为“W3C DOM4”的 W3C 文档中得到确认。我们可能将其理解为“DOM Level 4”,并假设它增加了一个额外的 DOM 级别,但规范的文本实际上说:

This document is published as a snapshot of the DOM Living Specification.

所以,这是一个历史性的讨论,但仍然值得拥有。

“DOM 级别”是描述 DOM 对象、方法和行为的规范的集合。更高级别的 DOM 规范建立在先前级别的基础上。变化以两种方式发生:

  1. 添加了一个全新的规范类别(例如,Level 3 添加了 Level 2 中不存在的“Validation”和“Load and Save”规范)

  2. 现有规范类别的修改(例如更新“核心”规范)

显然,第一种变化是纯粹的加法,而不是减法。第二种变化似乎也几乎完全是附加的,可能是因为 W3C 有兴趣保持与以前版本的向后兼容性。

不向后兼容的更改往往很少见且相当小。 Document.doctype例如,您引用的更改实际上在很大程度上是附加的。 3级加了一句:

For HTML documents, a DocumentType object may be returned, independently of the presence or absence of document type declaration in the HTML document.

这只是提供了更大的灵 active ,允许 DOM 实现在作者省略 <!DOCTYPE> 时在 HTML 中添加文档类型。 .这会破坏的唯一功能是以编程方式检测作者指定的文档类型是否存在的能力,这似乎不是特别有值(value)。

可能您听到有人说“哦,那是 DOM 级别 2,所以没关系”的原因是因为 DOM 级别 2 比 DOM 级别 3 得到更广泛的支持。在某些情况下,这甚至不是旧浏览器支持的问题:Firefox 标记了他们的 lack of support for the DOM 3's "Load and Save" specification作为 WONTFIX。相比之下,所有 2 级规范都得到了现代浏览器的很好支持,并且得到了更旧的浏览器的支持(因为 2 级比 3 级早了四年)。

关于javascript - DOM 级别有何不同,它们之间如何相互关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20334072/

相关文章:

javascript - 使用 moment.js 尝试在 native IOS 日历中创建事件

javascript - img 标签 css 上方的线性渐变

javascript - 推迟行动直到 .each() 完成

html - img-fluid 无法正确调整图像高度

html - 发送带有特殊字符的 html 电子邮件时使用 htmlentities 是否更好?

java - 在 log4j.xml 中使用 RollingFileAppender 创建两个日志文件

android - 如何在已经包含 ScrollView 的 Android 应用程序上添加更多按钮?

javascript - 不同浏览器上的不同行为

html - CSS下拉菜单定位错误

java - XML SAX : Explain result in `qName` and `localName` in one example XML file