HTMLCollection

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

HTMLCollection 介面代表一個通用集合(類似陣列的物件,類似於 arguments),其中包含元素(按文件順序),並提供用於從列表中選擇的方法和屬性。

HTML DOM 中的 HTMLCollection 是即時的(live);當底層文件發生更改時,它會自動更新。因此,如果需要新增、移動或刪除節點,最好製作一份副本(例如,使用 Array.from)進行迭代。

此介面之所以命名為 HTMLCollection 是出於歷史原因,因為在現代 DOM 之前,實現此介面的集合只能包含 HTML 元素作為其項。

這個介面曾是 建立不可修改列表的嘗試,並且至今仍然被支援,以免破壞現有程式碼。現代 API 使用基於 JavaScript 陣列 的型別來表示列表結構,從而提供了許多陣列方法,同時對其使用施加了額外的語義(例如,使其項只讀)。

這些歷史原因並不意味著作為開發人員,您應該避免使用 HTMLCollection。您不會自己建立 HTMLCollection 物件,而是透過諸如 Document.getElementsByClassName() 之類的 API 獲取它們,並且這些 API 並未被棄用。但是,請注意與真實陣列的語義差異。

例項屬性

HTMLCollection.length 只讀

返回集合中的項數。

例項方法

HTMLCollection.item()

返回列表中給定從零開始的 index 處的特定元素。如果 index 超出範圍,則返回 null

這是訪問 collection[i] 的替代方法(當 i 超出範圍時,後者返回 undefined)。這主要對非 JavaScript DOM 實現有用。

HTMLCollection.namedItem()

返回其 ID 或(作為備用)名稱與 name 指定的字串匹配的特定節點。按名稱匹配僅作為最後手段,僅在 HTML 中進行,並且僅當引用的元素支援 name 屬性時。如果沒有給定名稱的節點存在,則返回 null

這是訪問 collection[name] 的替代方法(當 name 不存在時,後者返回 undefined)。這主要對非 JavaScript DOM 實現有用。

JavaScript 中的用法

HTMLCollection 也透過名稱和索引將其成員作為屬性公開。HTML ID 可能包含 :. 作為有效字元,這將需要使用方括號表示法進行屬性訪問。目前,HTMLCollection 物件不識別純數字 ID,這會與陣列式訪問產生衝突,儘管 HTML 允許這些 ID。

例如,假設文件中有一個 <form> 元素,其 idmyForm

js
let elem1, elem2;

// document.forms is an HTMLCollection

elem1 = document.forms[0];
elem2 = document.forms.item(0);

alert(elem1 === elem2); // shows: "true"

elem1 = document.forms.myForm;
elem2 = document.forms.namedItem("myForm");

alert(elem1 === elem2); // shows: "true"

elem1 = document.forms["named.item.with.periods"];

規範

規範
DOM
# 介面-htmlcollection

瀏覽器相容性

另見