目錄
設置元素樣式
創建工具提示
使用getAttributesetAttribute
使用dataset屬性
使用jQuery
首頁 web前端 js教程 如何使用HTML5自定義數據屬性以及為什麼

如何使用HTML5自定義數據屬性以及為什麼

Feb 17, 2025 am 08:24 AM

How You Can Use HTML5 Custom Data Attributes and Why

HTML5自定義數據屬性讓開發者能夠在HTML元素中存儲自定義數據。它們提供了一種向HTML元素添加額外信息的方法,這些信息可被JavaScript或CSS使用,從而增強網頁功能。本文將介紹什麼是數據屬性以及它們的用途。

關鍵要點

  • HTML5自定義數據屬性允許開發者在HTML元素上存儲額外信息,這些信息可以被JavaScript或CSS訪問和使用,從而增強網頁功能。
  • 數據屬性總是以“data-”開頭,可用於通過屬性選擇器在CSS中設置元素樣式,並可通過attr()函數向用戶顯示信息。
  • 在JavaScript中,可以使用getAttribute()setAttribute()方法、dataset屬性或jQuery的data()方法訪問數據屬性。
  • 雖然自定義數據屬性功能強大,但只有在沒有其他合適的HTML元素或屬性時才應使用它們,並且不應用於存儲大量數據。

為什麼要使用自定義數據屬性?

我們經常需要存儲與不同DOM元素關聯的信息。這些信息對於讀者來說可能並不重要,但能夠輕鬆訪問它們會讓我們的開發工作變得輕鬆許多。例如,假設您在一個網頁上列出了不同的餐館。在HTML5之前,如果您想存儲餐館提供的食物類型或它們與訪問者的距離等信息,您將使用HTML的class屬性。如果您還需要存儲餐廳ID來查看用戶想要訪問的特定餐廳,該怎麼辦?以下是基於HTMLclass屬性的方法的一些問題:

  • HTML class屬性並非用於存儲此類數據。其主要目的是允許開發者將樣式信息分配給一組元素。
  • 每添加一條信息,都需要向元素添加一個新的類。這使得在JavaScript中解析數據以獲取所需信息變得更加困難。
  • 假設給定的類名以數字開頭。如果您決定稍後根據類名中的數據設置元素樣式,則必須轉義數字或在樣式表中使用屬性選擇器。

為了解決這些問題,HTML5引入了自定義數據屬性。所有名稱以data-開頭的元素屬性都是數據屬性。您還可以使用這些數據屬性來設置元素樣式。接下來,讓我們深入了解數據屬性的基礎知識,並學習如何在CSS和JavaScript中訪問它們的值。

HTML語法

如前所述,數據屬性的名稱將始終以data-開頭。這是一個示例:

<li data-type="veg" data-distance="2miles" data-identifier="10318">Salad King</li>
登入後複製
登入後複製

您現在可以使用這些數據屬性來搜索和排序訪客的餐廳。例如,您現在可以向他們顯示一定距離內所有的素食餐廳。除了data-前綴外,有效的自定義數據屬性的名稱只能包含字母、數字、連字符(-)、點(.)、冒號(:)或下劃線(_)。它不能包含大寫字母。使用數據屬性時,您需要注意兩點。首先,存儲在這些屬性中的數據應為字符串類型。任何可以進行字符串編碼的內容也可以存儲在數據屬性中。所有類型轉換都需要在JavaScript中完成。其次,只有在沒有其他合適的HTML元素或屬性時,才應使用數據屬性。例如,將元素的類存儲在data-class屬性中是不合適的。一個元素可以擁有任意數量的數據屬性,以及您想要的任意值。

數據屬性和CSS

您可以使用屬性選擇器在CSS中使用數據屬性來設置元素樣式。您還可以使用attr()函數向用戶顯示存儲在數據屬性中的信息(在工具提示或其他方式中)。

設置元素樣式

回到我們的餐廳示例,您可以使用屬性選擇器以不同的方式設置餐廳的背景,從而向用戶提示餐廳的類型或它們與用戶的距離。這是一個示例:

li[data-type='veg'] {
  background: #8BC34A;
}

li[data-type='french'] {
  background: #3F51B5;
}
登入後複製
登入後複製

創建工具提示

您可以使用工具提示向用戶顯示與元素相關的其他信息。我建議您將此方法用於快速原型,而不是生產網站,原因至少是僅限CSS的工具提示並非完全可訪問。您想要顯示的信息可以存儲在data-tooltip屬性中。

<span data-tooltip="简单的解释">Word</span>
登入後複製
登入後複製

然後,您可以使用::before偽元素向用戶呈現數據。

span::before {
  content: attr(data-tooltip);
  //更多样式规则
}

span:hover::before {
  display: inline-block;
}
登入後複製
登入後複製

使用JavaScript訪問數據屬性

在JavaScript中訪問數據屬性有三種方法。

使用getAttributesetAttribute

您可以在JavaScript中使用getAttribute()setAttribute()來獲取和設置不同數據屬性的值。如果給定的屬性不存在,則getAttribute方法將返回null或空字符串。以下是如何使用這些方法的示例:

let restaurant = document.getElementById("restaurantId");
let ratings = restaurant.getAttribute("data-ratings");
登入後複製
登入後複製

您可以使用setAttribute方法修改現有屬性的值或添加新屬性。

restaurant.setAttribute("data-owner-name", "someName");
登入後複製
登入後複製

使用dataset屬性

訪問數據屬性的一種更簡單的方法是使用dataset屬性。此屬性返回一個DOMStringMap對象,其中包含每個自定義數據屬性的一個條目。使用dataset屬性時,您需要注意一些事項。它需要三個步驟才能將自定義數據屬性轉換為DOMStringMap鍵:

  • 從屬性名稱中刪除data-前綴
  • 從名稱中刪除任何後跟小寫字母的連字符,並將後面的字母轉換為大寫
  • 其他字符將保持不變。這意味著任何後跟小寫字母的連字符也將保持不變。

然後可以使用存儲在對像中的駝峰式名稱作為鍵來訪問屬性,例如element.dataset.keyname。訪問屬性的另一種方法是使用方括號表示法,例如element.dataset[keyname]。考慮以下HTML:

<li data-type="veg" data-distance="2miles" data-identifier="10318">Salad King</li>
登入後複製
登入後複製

以下是一些示例:

li[data-type='veg'] {
  background: #8BC34A;
}

li[data-type='french'] {
  background: #3F51B5;
}
登入後複製
登入後複製

此方法現在已在所有主要瀏覽器中受支持,您應該優先使用它來訪問自定義數據屬性。

使用jQuery

您還可以使用jQuery的data()方法訪問元素的數據屬性。在jQuery 1.6版本之前,您必須使用以下代碼訪問數據屬性:

<span data-tooltip="简单的解释">Word</span>
登入後複製
登入後複製

從1.6版本開始,jQuery開始使用數據屬性的駝峰式版本。現在,您可以使用以下代碼執行相同的操作:

span::before {
  content: attr(data-tooltip);
  //更多样式规则
}

span:hover::before {
  display: inline-block;
}
登入後複製
登入後複製

您應該知道,jQuery還會嘗試在內部將從數據屬性獲得的字符串轉換為合適的類型,例如數字、布爾值、對象、數組和null

let restaurant = document.getElementById("restaurantId");
let ratings = restaurant.getAttribute("data-ratings");
登入後複製
登入後複製

如果您希望jQuery將從數據屬性獲得的值作為字符串獲取,而無需嘗試將其轉換為其他類型,則應使用jQuery的attr()方法。 jQuery僅在第一次訪問數據屬性時才檢索其值。然後不再訪問或更改數據屬性。您對這些屬性所做的所有更改都在內部進行,並且只能在jQuery中訪問。假設您正在操作以下列表項的數據屬性:

restaurant.setAttribute("data-owner-name", "someName");
登入後複製
登入後複製

您可以使用以下代碼更改其data-distance屬性的值:

<li data-type="veg" data-distance="2miles" data-identifier="10318" data-owner-name="someName">Salad King</li>
登入後複製

如您所見,使用原生JavaScript(非jQuery)訪問data-distance屬性的值仍然會提供舊的結果。

結論

在本教程中,我已經介紹了關於HTML5數據屬性的所有重要內容。除了使用屬性選擇器創建工具提示和設置元素樣式外,您還可以使用數據屬性來存儲和向用戶顯示其他數據,例如有關未讀消息的通知等等。

(此處應添加常見問題解答部分,內容與輸入文本中的FAQ部分一致,但語言表達可以更精煉一些。為了避免重複,我省略了這部分內容。)

以上是如何使用HTML5自定義數據屬性以及為什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1658
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
神秘的JavaScript:它的作用以及為什麼重要 神秘的JavaScript:它的作用以及為什麼重要 Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的演變:當前的趨勢和未來前景 JavaScript的演變:當前的趨勢和未來前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript引擎:比較實施 JavaScript引擎:比較實施 Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript:探索網絡語言的多功能性 JavaScript:探索網絡語言的多功能性 Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

如何使用Next.js(前端集成)構建多租戶SaaS應用程序 如何使用Next.js(前端集成)構建多租戶SaaS應用程序 Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C到JavaScript:所有工作方式 從C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

使用Next.js(後端集成)構建多租戶SaaS應用程序 使用Next.js(後端集成)構建多租戶SaaS應用程序 Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

See all articles