Element:getElementsByClassName() 方法

Baseline 已廣泛支援

此功能已非常成熟,可在多種裝置和瀏覽器版本上使用。自 2017 年 10 月以來,它已在各大瀏覽器中可用。

Element 方法 getElementsByClassName() 返回一個即時 HTMLCollection,其中包含具有指定類名或類名的所有後代元素。

Document 介面上的方法 getElementsByClassName() 的工作方式基本相同,只是它作用於整個文件,從文件根目錄開始。

語法

js
getElementsByClassName(names)

引數

names

一個包含一個或多個要匹配的類名的字串,用空格分隔。

返回值

一個 HTMLCollection,提供一個即時更新的列表,其中包含 names 中所有類的成員的每個元素。

用法說明

一如既往,返回的集合是即時的,這意味著它始終反映函式呼叫時所作用的元素所關聯的 DOM 樹的當前狀態。當匹配 names 的新元素被新增到子樹中時,它們會立即出現在集合中。同樣,如果一個現有元素不再匹配 names,並且其類集被調整為匹配,它也會立即出現在集合中。

反之亦然;當元素不再匹配類名集時,它們會立即從集合中刪除。

注意:混雜模式下,類名比較是不區分大小寫的。否則,它們是區分大小寫的。

示例

匹配單個類

要查詢包含單個指定類的元素,我們在呼叫 getElementsByClassName() 時僅提供該類名。

js
element.getElementsByClassName("test");

此示例查詢所有具有 test 類的元素,這些元素也是 idmain 的元素的後代。

js
document.getElementById("main").getElementsByClassName("test");

匹配多個類

查詢類列表中同時包含 redtest 類的元素。

js
element.getElementsByClassName("red test");

檢查結果

您可以使用返回的 HTMLCollection 上的 item() 方法或標準的陣列語法來檢查集合中的單個元素。但是,下面的程式碼可能不會按預期工作,因為只要刪除了任何 "color-box" 類,"matches" 就會改變。

js
const matches = element.getElementsByClassName("color-box");

for (let i = 0; i < matches.length; i++) {
  matches[i].classList.remove("color-box");
  matches.item(i).classList.add("hue-frame");
}

改為使用其他方法,例如

js
const matches = element.getElementsByClassName("color-box");

while (matches.length > 0) {
  matches.item(0).classList.add("hue-frame");
  matches[0].classList.remove("color-box");
}

此程式碼查詢具有 "color-box" 類的後代元素,透過呼叫 item(0) 新增 "hue-frame" 類,然後刪除 "color-box"(使用陣列表示法)。另一個元素(如果還有剩餘)將成為 item(0)

使用陣列方法過濾結果

我們還可以透過將 HTMLCollection 作為方法的 this 值來在任何 HTMLCollection 上使用 Array 方法。這裡我們將查詢所有具有 test 類的 <div> 元素。

js
const testElements = document.getElementsByClassName("test");
const testDivs = Array.prototype.filter.call(
  testElements,
  (testElement) => testElement.nodeName === "DIV",
);

規範

規範
DOM
# ref-for-dom-element-getelementsbyclassname

瀏覽器相容性