# 樹狀結構與 DOM 節點 ###### tags: `javascript`,`DOM` ## DOM:文件物件模型 ### ==文件 & 物件模型== **DOM 的全名為文件物件模型 (Document Object Model)**, DOM 規格由這兩個組織:W3C 和 WhatWG 共同制定,並由 WhatWG 統一發布 DOM Living Standard。各家瀏覽器廠商再依照規格實作出 DOM,並提供相關的 JavaScript 操作語法。 Document Object Model 其中 document 指的是瀏覽器裡的 HTML 網頁,而 object model 示意如下圖:  瀏覽器載入 HTML 以後,會進一步把 HTML 的語法結構,解析成為上圖右的物件模型,在這個示意圖中我們挑選其中幾個屬性來舉例: * object model 和 HTML 文件的結構是一致的 * 以 p 和 em 為例,在物件模型裡形成了父子階層關係 任何在網頁裡出現的內容,無論看得到或看不到的,都會被解析成為 DOM 的一部分,包含註解。 **DOM 是瀏覽器開放給程式語言操作網頁元素的一種介面!** ## ==樹狀結構:DOM Tree== DOM 採用**樹狀結構 (tree) 來儲存網頁元素,樹狀結構是資料結構的一種,特色是有明確的父子階層關係,也因為階層關係明確**,按相對關係查找資料特別方便。  樹狀裡每一個部分叫做「節點 (node)」,節點有四種類型: * **元素節點 (element node)** * **文字節點 (text node)** * 屬性節點 (attribute node) * 註解節點 (comment node) # ==根節點:document== **在 DOM 的樹狀結構裡,根節點是 document,代表網頁的本身。** 打開一個網頁,然後在 console 裡輸入 document。按下 enter 後會回傳 #document,這是一個元素節點,將其展開之後你會發現裡面是所有的 HTML 文件內容:  你在 DevTool 的 Elements 面板裡看到的內容就是 DOM 的結構,**他不是你的 HTML 文件,而是 DOM 操作的結果,如果你使用 JavaScript 改變 DOM 的狀態,瀏覽器顯示在 Elements 會同步更新。** 所有操作語法都繼承自 document 這個物件,你可以直接透過 DevTools 來查看document 物件的屬性與方法。 ## ==瀏覽器也是物件模型== 最後要提醒你 window 的存在,在 document 物件模型的上層還有 **window,也就是 「瀏覽器物件模型 (Browser Object Model)」,簡稱為 BOM。** ==BOM 的根節點是 window,也就是視窗==  window 之下還有其他的子物件包括 screen、navigator、location、history、frames、document。剛才提到的 document 是其中一部分。 ### ==根節點:window== 這次請你在 console 裡輸入 window,這次跑出來的內容不太一樣,看起來是一個物件,展開之後有一堆屬性和方法:  * window.alert 「彈出視窗」:  這裡特別提到 window,是因為有時候會不小心把 this 指向 window 物件,所以要特別認識一下,不然會被嚇到。 window 是一個全域物件 (global object),它不會受到 local scope 的限制。全域物件是可以省略不寫的,例如 `window.alert() 等於 alert()` `window.document 等於 document` ### 小結 現在你認識了 DOM,接下來我們要進一步學習如何用 JavaScript 來操作 DOM 元素 (DOM manipulation) ,基本步驟是: 1. 利用 HTML 裡的 id 或 class 等結構,選出一個特定元素 1. 按相對關係,從樹狀結構裡找出目標節點 1. 最後,修改這個目標節點
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.