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

Sco*_*ica 21 html javascript xml xhtml dom

我经常听说"DOM级别1","DOM级别2","DOM级别3"和"DOM级别4",并意识到我不知道它们之间的区别或它们之间的相互关系.

我知道非常基础 - DOM是文档对象模型,并且提供对脚本语言的访问(特别是,但据我所知,不限于各种版本的ECMAScript,例如ECMAScript 5.1)来访问HTML文档的元素.(我读过的一些网站 - 例如quirksmode上dom介绍 - 说它适用于任何XML文档,但HTML是一个足够的子集.)

w3c的DOM技术报告上的日期似乎暗示每个后续的DOM级别都会取代之前的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(无论是从怪异模式介绍),这是否意味着这样的语句是级别2,3和4是真的吗?(这些都是同一个问题,只是问了不同的方法)
  • 引用DOM级别真的只不过是用户代理必须如何使特定功能工作的速记方式吗?

显然,我可以研究w3c的DOM技术报告中的每个规范,但希望从那些有第一手经验的人那里得到答案.只是通过浏览DOM级别3的规范更改部分,我看到大多数从2到3的更改都是添加,尽管Node接口中的一些关键实现已经更改.这些改变是否破坏了什么?

我想做的不仅仅是在下次有人告诉我,"哦,这是DOM级别2,所以没关系"时,点头表示赞同,所以欢迎任何我错过的参考资料或者我从研究中没有收到的第一手资料.

aps*_*ers 14

首先,我将介绍来自MDN的DOM级别写入的消息(重点是原始的):

DOM曾经被写成一组级别.这已不再是这种情况.这些天它被保持为DOM Living Standard.此页面提供了以前的历史概况.

这在名为" W3C DOM4 " 的W3C文档中得到了证实.我们可能认为它意味着"DOM Level 4",并假设它增加了一个额外的DOM级别,但规范的文本实际上说:

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

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

"DOM Level"是描述DOM对象,方法和行为的规范集合.更高级别的DOM规范建立在以前的级别上.变化发生在两个方面:

  1. 添加了全新的规范类别(例如,级别3添加了"验证"和"加载和保存"规范,这在第2级中不存在)

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

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

不向后兼容的变化往往很少见且很小.Document.doctype例如,你引用的变化实际上很大程度上是附加的.3级增加了句子:

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

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

可能是你听到有人说"哦,这是DOM级别2,所以没关系"的原因是因为DOM级别2比DOM级别3得到更广泛的支持.在某些情况下,这甚至不是一个老问题浏览器支持:Firefox标志着他们缺乏对DOM 3的"加载和保存"规范的支持,如WONTFIX.相比之下,所有Level 2规范都得到了现代浏览器的支持,并且得到了许多旧版浏览器的支持(因为Level 2比3级早了4年).