定義: DOM (Document Object Model) 是瀏覽器用於操作 HTML 或 XML 文件的編程介面。它將文檔解析為一個節點樹 (Node Tree),每個節點代表文檔的一部分(標籤、屬性、文字等)。
為了便於操作多個節點,DOM 提供了兩種節點集合:HTMLCollection 和 NodeList。
document.getElementsByTagName()
或 document.getElementsByClassName()
等方法時,返回 HTMLCollection。for
),不支援 forEach
或 for...of
(需轉陣列後支援)。範例
const elements = document.getElementsByTagName('p'); // 返回 HTMLCollection
console.log(elements[0]); // 存取第一個 <p> 元素
console.log(elements.length); // 查看集合中元素的數量
document.querySelectorAll()
返回靜態的 NodeList。childNodes
返回動態的 NodeList。範例
const nodes = document.querySelectorAll('div'); // 返回靜態 NodeList
nodes.forEach(node => console.log(node)); // 使用 forEach 遍歷
HTMLCollection 的動態特性
<div class="example">Item 1</div>
<div class="example">Item 2</div>
<button id="add">Add Item</button>
<script>
const elements = document.getElementsByClassName('example'); // HTMLCollection
console.log(elements.length); // 初始長度:2
document.getElementById('add').addEventListener('click', () => {
const newDiv = document.createElement('div');
newDiv.className = 'example';
newDiv.textContent = 'New Item';
document.body.appendChild(newDiv);
console.log(elements.length); // 動態更新:3
});
</script>
NodeList 的靜態特性
const nodes = document.querySelectorAll('.example'); // 靜態 NodeList
console.log(nodes.length); // 初始長度:2
document.getElementById('add').addEventListener('click', () => {
const newDiv = document.createElement('div');
newDiv.className = 'example';
newDiv.textContent = 'New Item';
document.body.appendChild(newDiv);
console.log(nodes.length); // 長度仍為:2
});