# DOM 概述
## DOM
DOM 是 JavaScript 操作網頁的接口,全稱為“文檔對象模型”(Document Object Model)。它的作用是將網頁轉為一個 JavaScript 對象,從而可以用腳本進行各種操作(比如增刪內容)。
瀏覽器會根據 DOM 模型,將結構化文檔(比如 HTML 和 XML)解析成一系列的節點,再由這些節點組成一個樹狀結構(DOM Tree)。所有的節點和最終的樹狀結構,都有規范的對外接口。
DOM 只是一個接口規范,可以用各種語言實現。所以嚴格地說,DOM 不是 JavaScript 語法的一部分,但是 DOM 操作是 JavaScript 最常見的任務,離開了 DOM,JavaScript 就無法控制網頁。另一方面,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`(緊鄰在前的那個同級節點)屬性。
- 前言
- 入門篇
- 導論
- 歷史
- 基本語法
- 數據類型
- 概述
- null,undefined 和布爾值
- 數值
- 字符串
- 對象
- 函數
- 數組
- 運算符
- 算術運算符
- 比較運算符
- 布爾運算符
- 二進制位運算符
- 其他運算符,運算順序
- 語法專題
- 數據類型的轉換
- 錯誤處理機制
- 編程風格
- console 對象與控制臺
- 標準庫
- Object 對象
- 屬性描述對象
- Array 對象
- 包裝對象
- Boolean 對象
- Number 對象
- String 對象
- Math 對象
- Date 對象
- RegExp 對象
- JSON 對象
- 面向對象編程
- 實例對象與 new 命令
- this 關鍵字
- 對象的繼承
- Object 對象的相關方法
- 嚴格模式
- 異步操作
- 概述
- 定時器
- Promise 對象
- DOM
- 概述
- Node 接口
- NodeList 接口,HTMLCollection 接口
- ParentNode 接口,ChildNode 接口
- Document 節點
- Element 節點
- 屬性的操作
- Text 節點和 DocumentFragment 節點
- CSS 操作
- Mutation Observer API
- 事件
- EventTarget 接口
- 事件模型
- Event 對象
- 鼠標事件
- 鍵盤事件
- 進度事件
- 表單事件
- 觸摸事件
- 拖拉事件
- 其他常見事件
- GlobalEventHandlers 接口
- 瀏覽器模型
- 瀏覽器模型概述
- window 對象
- Navigator 對象,Screen 對象
- Cookie
- XMLHttpRequest 對象
- 同源限制
- CORS 通信
- Storage 接口
- History 對象
- Location 對象,URL 對象,URLSearchParams 對象
- ArrayBuffer 對象,Blob 對象
- File 對象,FileList 對象,FileReader 對象
- 表單,FormData 對象
- IndexedDB API
- Web Worker
- 附錄:網頁元素接口
- a
- img
- form
- input
- button
- option
- video,audio