Files
javascript-tutorial/docs/dom/general.md
2020-03-17 19:29:57 +08:00

47 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DOM 概述
## DOM
DOM 是 JavaScript 操作网页的接口全称为“文档对象模型”Document Object Model。它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作(比如增删内容)。
浏览器会根据 DOM 模型,将结构化文档(比如 HTML 和 XML解析成一系列的节点再由这些节点组成一个树状结构DOM Tree。所有的节点和最终的树状结构都有规范的对外接口。
DOM 只是一个接口规范可以用各种语言实现。所以严格地说DOM 不是 JavaScript 语法的一部分,但是 DOM 操作是 JavaScript 最常见的任务,离开了 DOMJavaScript 就无法控制网页。另一方面JavaScript 也是最常用于 DOM 操作的语言。后面介绍的就是 JavaScript 对 DOM 标准的实现和用法。
## 节点
DOM 的最小组成单位叫做节点node。文档的树形结构DOM 树),就是由各种不同类型的节点组成。每个节点可以看作是文档树的一片叶子。
节点的类型有七种。
- `Document`:整个文档树的顶层节点
- `DocumentType``doctype`标签(比如`<!DOCTYPE html>`
- `Element`网页的各种HTML标签比如`<body>``<a>`等)
- `Attr`:网页元素的属性(比如`class="right"`
- `Text`:标签之间或标签包含的文本
- `Comment`:注释
- `DocumentFragment`:文档的片段
浏览器提供一个原生的节点对象`Node`,上面这七种节点都继承了`Node`,因此具有一些共同的属性和方法。
## 节点树
一个文档的所有节点,按照所在的层级,可以抽象成一种树状结构。这种树状结构就是 DOM 树。它有一个顶层节点,下一层都是顶层节点的子节点,然后子节点又有自己的子节点,就这样层层衍生出一个金字塔结构,又像一棵树。
浏览器原生提供`document`节点,代表整个文档。
```javascript
document
// 整个文档树
```
文档的第一层有两个节点,第一个是文档类型节点(`<!doctype html>`),第二个是 HTML 网页的顶层容器标签`<html>`。后者构成了树结构的根节点root node其他 HTML 标签节点都是它的下级节点。
除了根节点,其他节点都有三种层级关系。
- 父节点关系parentNode直接的那个上级节点
- 子节点关系childNodes直接的下级节点
- 同级节点关系sibling拥有同一个父节点的节点
DOM 提供操作接口,用来获取这三种关系的节点。比如,子节点接口包括`firstChild`(第一个子节点)和`lastChild`(最后一个子节点)等属性,同级节点接口包括`nextSibling`(紧邻在后的那个同级节点)和`previousSibling`(紧邻在前的那个同级节点)属性。