六维教程

JavaScript 认识 DOM

学到这里,JavaScript 一直在操作数据和函数,还没有碰过网页。从这一篇开始进入浏览器操作网页的部分,主角就是 DOM。DOM 是 Document Object Model 的缩写,中文叫文档对象模型。

DOM 是什么

浏览器拿到 HTML 文档后,会把文档转换成一棵 JavaScript 能操作的对象树,这棵树就是 DOM。可以这样理解,HTML 是写给人看的文本,DOM 是浏览器为 JavaScript 准备的同款数据结构。有了 DOM,JavaScript 才能找到页面上的元素、修改内容、响应点击。

document 对象表示整个页面文档,是所有 DOM 操作的入口。后面几篇的获取元素、创建元素,全都要从 document 出发。

HTML 如何变成 DOM 树

浏览器解析 HTML 时按下面的规则转换。

  1. 标签变成元素节点,比如 <h1> 变成 h1 元素。
  2. 标签的属性变成元素节点的属性,比如 class 和 id。
  3. 标签之间的文本变成文本节点,挂在对应元素下面。
  4. 标签的嵌套关系变成树的父子关系。

看一个具体例子。

<!DOCTYPE html>
<html>
  <head>
    <title>首页</title>
  </head>
  <body>
    <h1>你好</h1>
    <p>这是正文</p>
  </body>
</html>

这段 HTML 转换成的 DOM 树大致长这样。

html
├── head
│   └── title
│       └── "首页"(文本节点)
└── body
    ├── h1
    │   └── "你好"(文本节点)
    └── p
        └── "这是正文"(文本节点)

每个节点在树里都有确定的上下级位置,JavaScript 顺着这棵树就能找到页面上的任意一个元素。

DOM 是一棵树

树形结构是 DOM 最核心的特点,可以记住下面几点。

  • html 是整棵树的根节点,在最顶层。
  • head 和 body 是 html 的子节点,它们互为兄弟节点。
  • 标签嵌套多深,树的层级就有多深,比如 title 是 head 的子节点。

如果觉得抽象,可以拿家谱来类比,html 是祖辈,head 和 body 是父辈,title、h1 是子辈,一层一层往下。或者拿文件夹来类比,html 是根目录,里面套着 head 文件夹和 body 文件夹,文件夹里还能继续套文件夹。

不管类比成什么,本质都是一句话,页面上的所有内容都能在这棵树里找到位置,JavaScript 的操作目标就是树上的节点。

节点不只有元素

上面提到节点分好几种,元素节点只是其中一种。常见的还有文本节点(标签之间的文字)、注释节点(<!-- --> 里的内容)等。后面的教程主要操作元素节点,其他节点知道存在即可,不展开。

小结

  • DOM 是浏览器把 HTML 文档转换成的对象树,JavaScript 通过它操作页面。
  • document 对象表示整个文档,是所有 DOM 操作的入口。
  • 标签变元素节点,属性变节点属性,文本变文本节点,嵌套变父子关系。
  • DOM 是树形结构,html 是根节点,可以拿家谱或文件夹来类比。
  • 节点分多种,元素节点只是其中一种。
  • 下一篇讲如何从这棵树上获取想要的元素。
上一篇
JavaScript 原型共享方法
下一篇
JavaScript 获取 DOM 元素