DOM级别有什么不同,它们是如何相互关联的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我经常听说“DOM级别1”,“DOM级别2”,“DOM级别3”和“DOM级别4”,并且意识到我不知道它们之间的区别或它们如何相互关联。

我知道非常基本的东西--DOM是文档对象模型,它提供了访问脚本语言(尤其是,但据我所知,不限于ECMAScript的各种版本,如ECMAScript 5.1)访问HTML文档的元素。

w3c的DOM技术报告的日期似乎意味着每个后续的DOM级别都会取代以前的级别。

可悲的是,我发现提供的最好的参考资料是维基百科,它似乎也是这样说的 - 标准化部分说随后的级别“添加”了额外的功能,而没有提到删除任何东西。

现在,对于我的问题,这可能是快速的,但希望表达我的无知的一般状态:

  • 什么是一个DOM级别与另一个级别的关系?
  • 较低级别的DOM是否完成较高级别DOM的子集?随着DOM级别的提升,是否有任何功能被删除?当我看到像The level 1 DOM will work fine on an HTML documentIn the Level 1 DOM, each object, whatever it may be exactly, is a Node(都来自quirksmode介绍)这样的陈述时,这是否意味着这些陈述对于2,3和4级是正确的?(这些都是相同的问题,只是问了不同的方式)
  • 引用DOM级别实际上不仅仅是一种用户代理必须为特定功能工作的简便方式?
提问于
用户回答回答于

首先,我将从MDN的DOM级别的书写中引出一条消息(重点放在原文中):

DOM曾经被写成一组关卡。这已不再是这种情况。现在它被维持为DOM Living Standard本页提供了古代日历的历史概述。

这在名为“ W3C DOM4 ” 的W3C文档中得到了证实。我们可以把它看作“DOM Level 4”,并假设它增加了一个额外的DOM级别,但是规范的文本实际上是这样说的:

本文档作为DOM Living Specification的快照发布。

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

“DOM级别”是描述DOM对象,方法和行为的规范集合。基于先前级别构建的DOM规范的更高级别。变化发生在两个方面:

  1. 增加一个全新的规格类别(例如,3级添加了“验证”和“加载和保存”规范,这在2级中不存在)
  2. 修改现有规范类别(例如更新“核心”规范)

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

不向后兼容的变化往往很少见。Document.doctype例如,你引用的改变实际上是相加的。等级3添加了这样的句子:

对于HTML文档,可以返回一个DocumentType对象,与HTML文档中是否存在文档类型声明无关。

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

也许你之所以听到有人说“哦,那是DOM级别2,所以没关系”,是因为DOM级别2比DOM级别3更广泛地支持。在某些情况下,这甚至不是旧的问题浏览器支持:Firefox标记为不支持DOM 3的“加载和保存”规范 WONTFIX。相比之下,所有Level 2规范都被现代浏览器支持得非常好,并且享受了许多旧版浏览器的支持(因为Level 2比Level 3旧四年)。

用户回答回答于

...在1级DOM中,每个对象(无论它可能是什么)都是一个Node ...,这是否意味着这些语句对于2,3,4级是正确的?

这是一个肯定的否定。DOM4中的属性不是节点。

DOM4进行了许多重要的非后向兼容更改。属性不是节点如果你不使用JavaScript或鸭子类型的语言,那么变化是一个很大的问题。此外,XML文档上的document.createElement()将在http://www.w3.org/1999/xhtml名称空间中创建元素,其中较早的级别在没有名称空间中创建元素。浏览器早已做到这一点,但典型的面向XML的DOM实现已经使用DOM3和更早的方式。如果你在非浏览器上下文中从DOM3实现迁移到DOM4实现,这将是一个巨大的转变。

扫码关注云+社区