第十四章 DOM
文档对象模型(DOM,Document Object Model)是语言中立的 HTML 和 XML 文档的 API。
DOM 由一系列节点类型构成,主要包括以下几种:
-
Node 是 基准节点类型,是文档一个部分的抽象表示,所有其他类型都继承 Node。
-
Document 类型表示整个文档,对应树形结构的 根节点。在 JavaScript 中,document 对象是Document 的实例,拥有查询和获取节点的很多方法。
-
Element 节点表示文档中 所有 HTML 或 XML 元素,可以用来操作它们的内容和属性。
-
其他节点类型分别表示文本内容、注释、文档类型、CDATA 区块和文档片段。
DOM 编程在多数情况下没什么问题,在涉及<script>
和<style>
元素时会有一点兼容性问题。因为这些元素分别包含脚本和样式信息,所以浏览器会将它们与其他元素区别对待。
要理解 DOM,最关键的一点是知道影响其性能的问题所在。DOM 操作 在 JavaScript 代码中是代价比较高的,NodeList 对象尤其需要注意。NodeList 对象是“实时更新”的,这意味着每次访问它都会执行一次新的查询。考虑到这些问题,实践中要尽量减少 DOM 操作的数量。
MutationObserver
是为代替性能不好的 MutationEvent
而问世的。使用它可以有效精准地监控DOM 变化,而且 API 也相对简单。
第十五章 DOM 扩展
虽然 DOM 规定了与 XML 和 HTML 文档交互的核心 API,但其他几个规范也定义了对 DOM 的扩展。
本章主要介绍了以下 3 个规范:
Selectors API
为基于 CSS 选择符获取 DOM 元素定义了几个方法:querySelector()
、querySelectorAll()
和matches()
。- Element Traversal 在 DOM 元素上定义了额外的属性,以方便对 DOM 元素进行 遍历。这个需求是因浏览器处理元素间空格的差异而产生的。
- HTML5 为标准 DOM 提供了大量扩展。其中包括对
innerHTML
属性等事实标准进行了标准化,还有焦点管理、字符集、滚动等特性。