使用資料屬性
HTML 旨在具有可擴充套件性,用於應與特定元素關聯但不需要任何定義含義的資料。 data-* 屬性 允許我們在標準的、語義化的 HTML 元素上儲存額外的資訊,而無需其他技巧,例如非標準屬性或 DOM 上的額外屬性。
HTML 語法
語法很簡單。任何元素上的任何屬性,其屬性名稱以 data- 開頭,都是資料屬性。假設您有一篇文章,並且想要儲存一些沒有視覺表示形式的額外資訊。只需為此使用 data 屬性即可
<article
id="electric-cars"
data-columns="3"
data-index-number="12314"
data-parent="cars">
…
</article>
JavaScript 訪問
在 JavaScript 中讀取這些屬性的值也非常簡單。您可以使用 getAttribute() 及其完整的 HTML 名稱來讀取它們,但標準定義了一種更簡單的方法:一個 DOMStringMap,您可以透過 dataset 屬性讀取。
要透過 dataset 物件獲取 data 屬性,請獲取屬性名稱中 data- 後面的部分(注意,連字元會轉換為 駝峰式大小寫)。
const article = document.querySelector("#electric-cars");
// The following would also work:
// const article = document.getElementById("electric-cars")
article.dataset.columns; // "3"
article.dataset.indexNumber; // "12314"
article.dataset.parent; // "cars"
每個屬性都是一個字串,可以讀取和寫入。在上述情況下,設定 article.dataset.columns = 5 會將該屬性更改為 "5"。
CSS 訪問
請注意,由於資料屬性是普通的 HTML 屬性,因此您甚至可以從 CSS 中訪問它們。例如,要顯示文章上的父資料,您可以使用 CSS 中的 生成內容 以及 attr() 函式
article::before {
content: attr(data-parent);
}
您還可以使用 CSS 中的 屬性選擇器 根據資料更改樣式
article[data-columns="3"] {
width: 400px;
}
article[data-columns="4"] {
width: 600px;
}
您可以在 此 JSBin 示例 中看到所有這些協同工作。
資料屬性還可以儲存以包含不斷變化的資訊,例如遊戲中的分數。在此處使用 CSS 選擇器和 JavaScript 訪問,您可以構建一些巧妙的效果,而無需編寫自己的顯示例程。請參閱 此螢幕截圖,瞭解使用生成內容和 CSS 過渡的示例(JSBin 示例)。
資料值是字串。數字值必須在選擇器中加引號,才能使樣式生效。
問題
不要在資料屬性中儲存應可見且可訪問的內容,因為輔助技術可能無法訪問它們。此外,搜尋爬蟲可能不會索引資料屬性的值。
另請參閱
- 本文改編自 hacks.mozilla.org 上的“在 JavaScript 和 CSS 中使用資料屬性”。
- SVG 2 也支援自定義屬性;請參閱
HTMLElement.dataset和data-*以獲取更多資訊。 - 如何使用 HTML 資料屬性(Sitepoint)