如前所述,滚动是 HTML5 之前 DOM 标准没有涉及的领域。虽然 HTML5 把 scrollIntoView() 标准化了,但不同浏览器中仍然有其他专有方法。比如,scrollIntoViewIfNeeded()作为 HTMLElement 类型的扩展可以在所有元素上调用。scrollIntoViewIfNeeded(alingCenter)会在 元素不可见的情况下,将其滚动到窗口或包含窗口中,使其可见;如果已经在视口中可见,则这个方法 什么也不做。如果将可选的参数 alingCenter 设置为 true,则浏览器会尝试将其放在视口中央。Safari、 Chrome 和 Opera 实现了这个方法。
下面使用 scrollIntoViewIfNeeded()方法的一个例子: // 如果不可见,则将元素可见
document.images[0].scrollIntoViewIfNeeded();
考虑到 scrollIntoView()是唯一一个所有浏览器都支持的方法,所以只用它就可以了。
虽然 DOM 规定了与 XML 和 HTML 文档交互的核心 API,但其他几个规范也定义了对 DOM 的扩 展。很多扩展都基于之前的已成为事实标准的专有特性标准化而来。本章主要介绍了以下 3 个规范。
Selectors API 为基于 CSS 选择符获取 DOM 元素定义了几个方法:querySelector()、 querySelectorAll()和 matches()。
Element Traversal 在 DOM 元素上定义了额外的属性,以方便对 DOM 元素进行遍历。这个需求 是因浏览器处理元素间空格的差异而产生的。
HTML5 为标准 DOM 提供了大量扩展。其中包括对 innerHTML 属性等事实标准进行了标准化, 还有焦点管理、字符集、滚动等特性。
DOM 扩展的数量总体还不大,但随着 Web 技术的发展一定会越来越多。浏览器仍然没有停止对专 有扩展的探索,如果出现成功的扩展,那么就可能成为事实标准,或者最终被整合到未来的标准中。
DOM1(DOM Level 1)主要定义了 HTML 和 XML 文档的底层结构。DOM2(DOM Level 2)和 DOM3(DOM Level 3)在这些结构之上加入更多交互能力,提供了更高级的 XML 特性。实际上,DOM2 和 DOM3 是按照模块化的思路来制定标准的,每个模块之间有一定关联,但分别针对某个 DOM 子集。 这些模式如下所示。
DOM Core:在 DOM1 核心部分的基础上,为节点增加方法和属性。
DOM Views:定义基于样式信息的不同视图。
DOM Events:定义通过事件实现 DOM 文档交互。
DOM Style:定义以编程方式访问和修改 CSS 样式的接口。
DOM Traversal and Range:新增遍历 DOM 文档及选择文档内容的接口。
DOM HTML:在 DOM1 HTML 部分的基础上,增加属性、方法和新接口。
DOM Mutation Observers:定义基于 DOM 变化触发回调的接口。这个模块是 DOM4 级模块,
用于取代 Mutation Events。
本章介绍除 DOM Events 和 DOM Mutation Observers 之外的其他所有模块