Web
Document Object Model
- DOM 是一個 API,讓我們可以用程式語言 (e.g. Javascript) 來操作 web documents (e.g. HTML)
- DOM 採用 DOM tree 的形式來表示 HTML 檔案
DOM Tree
有兩個主要的 abstract base class
EventTarget
: 代表這個物件可以接收 event- 常用的
addEventListener()
就是在這個 class 做定義
- 常用的
Node
: 繼承自EventTarget
, 作為 tree 內各種節點的 base class
常見的節點 (都是繼承自 Node
):
Document
: 每個網頁都會對應到一個,可以看做 tree 的 rootElement
: 代表一般元素的節點,像是各種 HTML element 就是屬於它的 subclassHTMLElement
Attr
: 代表Element
的屬性- 基本上我們比較常使用 Element.getAttribute() 來操作屬性,鮮少直接操作
Attr
- 基本上我們比較常使用 Element.getAttribute() 來操作屬性,鮮少直接操作
CharacterData
: 代表只含有一般文字的節點,會由Text
,Comment
等其他 subclasses 來實作
關於 Text
類型的節點: 實際上 HTML 檔案內的換行也會被轉換成 Text
節點,詳見
MDN 的範例
DOMContentLoaded v.s. load event
- DOMContentLoaded (DCL): 當 DOM 被完整建構,而且所有 Javascript 都被執行完後 (包括
defer
) CSSOM 都出現了,觸發該事件 - load: 當整個頁面以及所有需要的資源都載入完成時觸發