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中訪問數據屬性有三種方法。
使用getAttribute
和setAttribute
您可以在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中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

10款趣味橫生的jQuery遊戲插件,讓您的網站更具吸引力,提升用戶粘性!雖然Flash仍然是開發休閒網頁遊戲的最佳軟件,但jQuery也能創造出令人驚喜的效果,雖然無法與純動作Flash遊戲媲美,但在某些情況下,您也能在瀏覽器中獲得意想不到的樂趣。 jQuery井字棋遊戲 遊戲編程的“Hello world”,現在有了jQuery版本。 源碼 jQuery瘋狂填詞遊戲 這是一個填空遊戲,由於不知道單詞的上下文,可能會產生一些古怪的結果。 源碼 jQuery掃雷遊戲

本教程演示瞭如何使用jQuery創建迷人的視差背景效果。 我們將構建一個帶有分層圖像的標題橫幅,從而創造出令人驚嘆的視覺深度。 更新的插件可與JQuery 1.6.4及更高版本一起使用。 下載

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

Matter.js是一個用JavaScript編寫的2D剛體物理引擎。此庫可以幫助您輕鬆地在瀏覽器中模擬2D物理。它提供了許多功能,例如創建剛體並為其分配質量、面積或密度等物理屬性的能力。您還可以模擬不同類型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流瀏覽器。此外,它也適用於移動設備,因為它可以檢測觸摸並具有響應能力。所有這些功能都使其值得您投入時間學習如何使用該引擎,因為這樣您就可以輕鬆創建基於物理的2D遊戲或模擬。在本教程中,我將介紹此庫的基礎知識,包括其安裝和用法,並提供一

本文演示瞭如何使用jQuery和ajax自動每5秒自動刷新DIV的內容。 該示例從RSS提要中獲取並顯示了最新的博客文章以及最後的刷新時間戳。 加載圖像是選擇


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

記事本++7.3.1
好用且免費的程式碼編輯器

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

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。