# DOM 簡單介紹 ###### tags: `JavaScript` `JS 直播班 - 2021 秋季班` DOM 全名為 <font color=red>Document Object Model(文件物件模型)</font>,其實就是把一份 HTML 文件內的各個標籤,包括文字、圖片等等都定義成物件,而這些物件最終會形成一個樹狀結構(又名: DOM Tree)。 1. Document 是一個物件(也是window object的property) 2. Document指的是HTML document. 3. this model means all HTML elements are objects. ![](https://i.imgur.com/LivaUIn.gif) ![](https://i.imgur.com/fXDb9p7.png) 在最根部的地方,就是 document,就是 BOM 圖中 window 下面的那個。 往下可以延伸出一個個的 HTML 標籤,一個節點就是一個標籤,往下又可以再延伸出屬性的節點。 DOM API 就是定義了讓 JavaScript 可以存取、改變 HTML 架構、樣式和內容的方法,甚至是對節點綁定的事件。 JavaScript 就是透過 DOM 提供的 API 來對 HTML 做存取與操作。 ## <font color=#1595A8> 簡單介紹 DOM 的幾個 API (METHOD) </font> ### <font color=#7B162D>DOM 元素查詢</font> 利用DOM抓取HTML的元素 ```=JavaScript document.getElementById(id) # 根據 id 來取得元素 document.getElementsByTagName(name) # 根據標籤 tag 來取得元素 document.getElementsByClassName(name) # 根據 class 名稱來取得元素 document.querySelector(selectors) # 根據 CSS 選擇器 (CSS selectors) 來取得符合條件且第一個找到的 HTML 元素。 document.querySelectorAll(selectors) # 根據 CSS 選擇器 (CSS selectors) 來取得所有符合條件的 HTML 元素集合 (NodeList)。 ``` ### <font color=#7B162D>DOM 元素變更</font> ```=JavaScript // element代表DOM所抓取到的元素 element.innerHTML = new html content # 改變 HTML 內文 element.innerText = new html content # 改變 HTML 內文 element.textContent= new html content # 改變 HTML 內文 element.attribute = new value # 改變屬性 element.style.property = new style # 改變style element.setAttribute(attribute, value) # 改變屬性 ``` #### <font color=#BB183D> innerText 跟 innerHTML 跟 textContent 的差異 </font> ```=JavaScript // innerHTML 、 innerText、textContent let h1=document.querySelector("h1.myh1"); let h2 =document.querySelector('h2.myh2'); let mytext=document.querySelector("h1.mytext"); // innerHTML的效果= <h1 class="myh1">today is a good day.</h1> // 當使用innerHTML時,會把原本寫的東西都先刪除再放入新寫的東西 // 不過innerHTML優先權較高 // innerText效果幾乎跟innerHTML一樣 //唯一的不同: innerHTML會被當成程式碼來閱讀 , innerText會被當成字串閱讀 h1.innerHTML="<mark>today is a good day</mark>"; h2.innerText="<mark>today is a good day</mark>"; mytext.textContent="<mark>today is a good day</mark>"; //textContent為修改文字內容 //跟innerText差不多 ---------------------------------------------------------------------------- 編譯結果: ``` ![](https://i.imgur.com/WFgU4Eg.png) ## <font color=#1595A8> 透過 DOM 和 JS 在網頁上印出 Hello world </font> ### <font color=#7B162D>HTML 建立標籤</font> 先在HTML建立一個p標籤,並套用你的JS檔案 ```=HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <p> </p> <script src="/test.js"></script> </body> </html> ``` ### <font color=#7B162D>利用 DOM 查詢p標籤</font> 利用querySelector抓取HTML裡面的p標籤 ```=JavaScript let myH1= document.querySelector('p'); ``` ### <font color=#7B162D>利用 DOM 修改p的內容</font> 利用innerText將p的內容修改成hello world ```=JavaScript myH1.innerText='hello world'; ``` ### <font color=#7B162D>網頁顯示結果</font> ![](https://i.imgur.com/p4X3lmA.png)