JavaScript DOM 選擇器
在本教程中,你將學習如何在 JavaScript 中選擇 DOM 元素。
JavaScript 中選擇 DOM 元素
JavaScript 最常用於獲取或修改頁面上 HTML 元素的內容或值,以及應用某些效果,如 show,hide,animations 等。但是,在你執行任何操作之前,你需要查詢或選擇目標 HTML 元素。
在以下部分中,你將看到一些在頁面上選擇元素並使用 JavaScript 對它們執行某些操作的常用方法。
選擇最頂層的元素
HTML 文件中最頂層的元素可直接作為 document
屬性使用。例如,<html>
元素可以使用 document.documentElement
屬性來訪問該元素,而<head>
元素可以使用 document.head
屬性來訪問該元素, <body>
元素可以使用 document.body
屬性來訪問該元素。這是一個例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JS Select Topmost Elements</title>
</head>
<body>
<script>
// Display lang attribute value of html element
alert(document.documentElement.getAttribute("lang")); // Outputs: en
// Set background color of body element
document.body.style.background = "yellow";
// Display tag name of the head element's first child
alert(document.head.firstElementChild.nodeName); // Outputs: meta
</script>
</body>
</html>
不過要小心。如果 document.body
在 <body>
標記之前使用 (例如在 <head>
標記內),它將返回 null
而不是 body 元素。因為指令碼執行的時間點,瀏覽器不會解析 <body>
標記,所以 document.body
是 null
。
讓我們看一下下面的例子來更好地理解這個:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JS Document.body Demo</title>
<script>
alert("From HEAD: " + document.body); // Outputs: null (since <body> is not parsed yet)
</script>
</head>
<body>
<script>
alert("From BODY: " + document.body); // Outputs: HTMLBodyElement
</script>
</body>
</html>
按 ID 選擇元素
你可以使用 getElementById()
方法根據其唯一 ID 選擇元素。這是在 DOM 樹中查詢 HTML 元素的最簡單方法。
以下示例選擇並突出顯示具有 ID 屬性 id="mark"
的元素。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JS Select Element by ID</title>
</head>
<body>
<p id="mark">This is a paragraph of text.</p>
<p>This is another paragraph of text.</p>
<script>
// Selecting element with id mark
var match = document.getElementById("mark");
// Highlighting element's background
match.style.background = "yellow";
</script>
</body>
</html>
getElementById()
如果找到匹配元素,則該方法將元素作為物件返回,或者如果在文件中找不到匹配元素,則返回 null
。
注意: 任何 HTML 元素都可以具有 id
屬性。該屬性的值在頁面中必須是唯一的,即同一頁面中的兩個元素不能具有相同的 ID。
按類名選擇元素
同樣,你可以使用 getElementsByClassName()
方法選擇具有特定類名的所有元素。此方法返回具有所有給定類名的所有子元素的類陣列物件。我們來看看下面的例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JS Select Elements by Class Name</title>
</head>
<body>
<p class="test">This is a paragraph of text.</p>
This is another paragraph of text.
<p>This is one more paragraph of text.</p>
<script>
// Selecting elements with class test
var matches = document.getElementsByClassName("test");
// Displaying the selected elements count
document.write("Number of selected elements: " + matches.length);
// Applying bold style to first element in selection
matches[0].style.fontWeight = "bold";
// Applying italic style to last element in selection
matches[matches.length - 1].style.fontStyle = "italic";
// Highlighting each element's background through loop
for(var elem in matches) {
matches[elem].style.background = "yellow";
}
</script>
</body>
</html>
按標籤名稱選擇元素
你還可以使用 getElementsByTagName()
方法按標記名稱選擇 HTML 元素。此方法還返回具有給定標記名稱的所有子元素的類陣列物件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JS Select Elements by Tag Name</title>
</head>
<body>
<p>This is a paragraph of text.</p>
This is another paragraph of text.
<p>This is one more paragraph of text.</p>
<script>
// Selecting all paragraph elements
var matches = document.getElementsByTagName("p");
// Printing the number of selected paragraphs
document.write("Number of selected elements: " + matches.length);
// Highlighting each paragraph's background through loop
for(var elem in matches) {
matches[elem].style.background = "yellow";
}
</script>
</body>
</html>
使用 CSS 選擇器選擇元素
你可以使用 querySelectorAll()
方法選擇與指定的 CSS 選擇器匹配的元素。CSS 選擇器提供了一種非常強大且有效的方法來選擇文件中的 HTML 元素。請檢視 CSS 教程部分以瞭解有關它們的更多資訊。
此方法返回與指定選擇器匹配的所有元素的列表。你可以像檢查任何陣列一樣檢查它,如以下示例所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JS Select Elements with CSS Selectors</title>
</head>
<body>
<ul>
<li>Bread</li>
<li class="tick">Coffee</li>
<li>Pineapple Cake</li>
</ul>
<script>
// Selecting all li elements
var matches = document.querySelectorAll("ul li");
// Printing the number of selected li elements
document.write("Number of selected elements: " + matches.length + "<hr>")
// Printing the content of selected li elements
for(var elem of matches) {
document.write(elem.innerHTML + "<br>");
}
// Applying line through style to first li element with class tick
matches = document.querySelectorAll("ul li.tick");
matches[0].style.textDecoration = "line-through";
</script>
</body>
</html>
注: 該 querySelectorAll()
方法還支援 CSS 偽類 像 :first-child
, :last-child
, :hover
等等。但是,對於 CSS 偽元素 ,例如 ::before
, ::after
, ::first-line
等此方法始終返回一個空列表。