DOM 是什麼?前端工程師必學的文件物件模型(Document Object Model)
前言
無論是使用 JavaScript、jQuery、React、Vue 或 Angular,背後都離不開一個重要的核心概念:DOM(Document Object Model)。
當使用者點擊按鈕、輸入文字、切換畫面時,網頁內容之所以能夠即時更新,都是透過 DOM 操作完成的。
本文將帶你了解 DOM 的運作原理、常見操作方式,以及它在現代前端開發中的角色。
DOM 是什麼?
DOM(Document Object Model,文件物件模型)是瀏覽器將 HTML 文件轉換成的一種樹狀結構(Tree Structure)。
瀏覽器讀取 HTML 後,會將每個標籤轉換成節點(Node),形成一棵 DOM Tree。
例如:
<html>
<body>
<h1>Hello DOM</h1>
<button>Click Me</button>
</body>
</html>會轉換成:
Document
│
└── html
│
└── body
│
├── h1
│ └── "Hello DOM"
│
└── button
└── "Click Me"JavaScript 可以透過 DOM API 存取這些節點,進而修改畫面內容。
為什麼需要 DOM?
如果沒有 DOM:
- JavaScript 無法讀取網頁內容
- 無法修改畫面
- 無法處理使用者互動
- 網頁只能顯示靜態內容
DOM 提供了 JavaScript 與 HTML 之間的橋樑。
例如:
document.getElementById("title").innerText = "Hello World";執行後:
<h1 id="title">Hello World</h1>畫面就會立即更新。
常見 DOM 操作
1. 取得元素
透過 ID:
const title = document.getElementById("title");透過 Class:
const items = document.getElementsByClassName("item");透過 CSS Selector:
const button = document.querySelector(".btn");取得所有符合條件元素:
const buttons = document.querySelectorAll(".btn");2. 修改內容
修改文字:
element.innerText = "新的內容";修改 HTML:
element.innerHTML = "<strong>Hello DOM</strong>";3. 修改樣式
element.style.color = "red";
element.style.fontSize = "20px";4. 修改屬性
image.src = "logo.png";
link.href = "https://example.com";5. 新增元素
建立節點:
const li = document.createElement("li");
li.innerText = "新項目";加入到畫面:
document
.querySelector("ul")
.appendChild(li);6. 刪除元素
element.remove();DOM Event(事件處理)
DOM 不只是修改畫面,也能監聽使用者操作。
例如按鈕點擊事件:
const button =
document.getElementById("btn");
button.addEventListener(
"click",
function () {
alert("按鈕被點擊");
}
);常見事件:
| 事件(Event) | 說明 | 常見用途 |
|---|---|---|
| click | 滑鼠點擊元素時觸發 | 按鈕操作、選單切換 |
| dblclick | 滑鼠雙擊元素時觸發 | 編輯模式切換 |
| change | 表單欄位值改變後觸發 | 下拉選單、核取方塊 |
| input | 輸入內容時即時觸發 | 搜尋建議、即時驗證 |
| submit | 表單送出時觸發 | 資料提交與驗證 |
| keydown | 鍵盤按下時觸發 | 快捷鍵功能 |
| keyup | 鍵盤放開時觸發 | 輸入完成檢查 |
| mouseover | 滑鼠移入元素時觸發 | 顯示提示資訊 |
| mouseout | 滑鼠移出元素時觸發 | 隱藏提示資訊 |
| focus | 元素取得焦點時觸發 | 輸入框高亮顯示 |
| blur | 元素失去焦點時觸發 | 表單欄位驗證 |
| load | 頁面或資源載入完成時觸發 | 初始化資料 |
| resize | 瀏覽器視窗大小改變時觸發 | 響應式版面調整 |
| scroll | 頁面捲動時觸發 | 無限滾動、回到頂部按鈕 |
實作範例:簡易計數器
HTML:
<h1 id="count">0</h1>
<button id="addBtn">
+1
</button>JavaScript:
let count = 0;
document
.getElementById("addBtn")
.addEventListener(
"click",
function () {
count++;
document.getElementById(
"count"
).innerText = count;
}
);當使用者點擊按鈕時:
- 觸發 click Event
- 修改 count 變數
- 更新 DOM
- 畫面重新顯示
DOM 的缺點
當網頁規模變大時,頻繁操作 DOM 可能造成效能問題。
例如:
for(let i=0;i<10000;i++){
document.body.appendChild(
document.createElement("div")
);
}每次修改都可能導致:
- Reflow(重新排版)
- Repaint(重新繪製)
因此大量 DOM 操作可能影響網頁效能。
現代框架如何改善 DOM 效能?
React 提出了 Virtual DOM 的概念。
流程如下:
資料變更
↓
Virtual DOM 更新
↓
Diff 比對
↓
只更新變動部分
↓
實際 DOM 更新優點:
- 減少直接操作 DOM
- 提升大型應用效能
- 更容易維護程式碼
Vue、Angular 等框架也採用了類似機制。
DOM 在 AI 時代還重要嗎?
答案是非常重要。
即使使用:
- React
- Vue
- Angular
- Svelte
- Next.js
本質上仍然是在操作 DOM。
了解 DOM 可以幫助開發者:
- 理解框架運作原理
- 解決效能問題
- 撰寫原生 JavaScript
- 進行瀏覽器除錯
因此 DOM 仍然是前端工程師必備基礎知識。
結論
DOM(Document Object Model)是瀏覽器提供給 JavaScript 操作網頁的核心機制。
透過 DOM,開發者可以:
- 讀取網頁內容
- 修改 HTML
- 控制 CSS
- 處理事件
- 動態更新畫面
雖然現代框架已經大幅降低直接操作 DOM 的需求,但理解 DOM 的運作方式,仍然是成為優秀前端工程師的重要基礎。
留言
張貼留言