# 網頁JS 小知識01: 什麼是DOM ###### tags: `JavaScript` `HTML` ![](https://i.imgur.com/GIlmLvF.png) 圖片來源: [w3.org](https://www.w3.org/TR/WD-DOM/introduction.html) ### DOM簡介 DOM(Document Object Model)文件物件模型是什麼呢?根據[Mozilla官方文件](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction) : >The Document Object Model (DOM) is the data representation of the objects that comprise the structure and content of a document on the web. > The Document Object Model (DOM) is a programming interface for web documents. It represents the page so that programs can change the document structure, style, and content. 更白話一點來看,DOM其實就是一種介於HTML跟其它程式語言間的[API](https://www.youtube.com/watch?v=s7wmiS2mSXY&ab_channel=MuleSoftVideos),其它程式語言(通常是JavaScript)可藉由DOM來控制HTML或是XML文件。 >以下是我幫助理解的方式,請斟酌參考 >**Document** 指的就是HTML或是XML文件 >**Object** 指的就是文件裡面的物件,那麽誰是物件呢?我們一定會用到的tag、屬性、文字等都是! >**Model** 指的就是這些物件佈局的方式 *** ### DOM的資料結構 有些人看網路文章會看到DOM的樹狀結構介紹,其實就是在講DOM當中的資料分類以及搜尋方式,在標記特定物件時,DOM會順著父層 -> 子層這樣的路徑去找到要標記的對象。 例如下方有個簡單的HTML程式碼,如果用程式語言去標記了h1這個物件,但程式在實際執行上會從html -> body -> h1 去找到該物件。 ```htmlembedded= <html> <head> <title>I Love Teemo </title> </head> <body> <h1 class="aboutTeemo"> Teemo is not tall, but cute. </h1> </body> </html> ``` *** ### 如何標記DOM物件與加工 DOM所包含的物件,其實就代表了網頁內容,所標記DOM的物件之後,就可以對整個網頁內容進行加工。目前大部分都是使用JavaScript來控制DOM物件。 舉例,如果我想要在終端機上面印出剛才h1裡面的字,要怎麼辦呢? 這時候我們可以拆解步驟 1.設變數 2.抓取DOM物件 3.在終端機印出 #### 1.設變數 ```javascript= const a = // 用let, var也可以,但用var可能會變數提升的可能不得不留意 ``` #### 2.抓取DOM物件 ```javascript= const a = document.getElementById('aboutTeemo'); //或 getElementByClassName() //或 getElementByName() //也可以搭配querySelector來進行,但存在一些微妙的差異,另篇文章討論 ``` #### 3. 在終端機印出 ```javascript= var a = document.getElementById("aboutTeemo").innerText; console.log(a); ``` 剛開始看到程式碼,我很好奇為何一定要加個document?後來理解運作的原理後,才明白它指的其實就是你正在使用的這份HTML或XML檔案 所以抓的過程可以理解是:抓檔案 -> 抓特定物件 -> 呈現物件裡面的某個屬性 但,目前的情況是把字印在「終端機」上面,如果要把字印在網頁上要怎麼做呢?我們另外寫篇文章討論:)