亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
設(shè)置元素樣式
創(chuàng)建工具提示
使用getAttributesetAttribute
使用dataset屬性
使用jQuery
首頁 web前端 js教程 如何使用HTML5自定義數(shù)據(jù)屬性以及為什么

如何使用HTML5自定義數(shù)據(jù)屬性以及為什么

Feb 17, 2025 am 08:24 AM

How You Can Use HTML5 Custom Data Attributes and Why

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

關(guān)鍵要點(diǎn)

  • HTML5自定義數(shù)據(jù)屬性允許開發(fā)者在HTML元素上存儲(chǔ)額外信息,這些信息可以被JavaScript或CSS訪問和使用,從而增強(qiáng)網(wǎng)頁功能。
  • 數(shù)據(jù)屬性總是以“data-”開頭,可用于通過屬性選擇器在CSS中設(shè)置元素樣式,并可通過attr()函數(shù)向用戶顯示信息。
  • 在JavaScript中,可以使用getAttribute()setAttribute()方法、dataset屬性或jQuery的data()方法訪問數(shù)據(jù)屬性。
  • 雖然自定義數(shù)據(jù)屬性功能強(qiáng)大,但只有在沒有其他合適的HTML元素或?qū)傩詴r(shí)才應(yīng)使用它們,并且不應(yīng)用于存儲(chǔ)大量數(shù)據(jù)。

為什么要使用自定義數(shù)據(jù)屬性?

我們經(jīng)常需要存儲(chǔ)與不同DOM元素關(guān)聯(lián)的信息。這些信息對(duì)于讀者來說可能并不重要,但能夠輕松訪問它們會(huì)讓我們的開發(fā)工作變得輕松許多。例如,假設(shè)您在一個(gè)網(wǎng)頁上列出了不同的餐館。在HTML5之前,如果您想存儲(chǔ)餐館提供的食物類型或它們與訪問者的距離等信息,您將使用HTML的class屬性。如果您還需要存儲(chǔ)餐廳ID來查看用戶想要訪問的特定餐廳,該怎么辦?以下是基于HTMLclass屬性的方法的一些問題:

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

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

HTML語法

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

<li data-type="veg" data-distance="2miles" data-identifier="10318">Salad King</li>

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

數(shù)據(jù)屬性和CSS

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

設(shè)置元素樣式

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

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

li[data-type='french'] {
  background: #3F51B5;
}

創(chuàng)建工具提示

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

<span data-tooltip="簡單的解釋">Word</span>

然后,您可以使用::before偽元素向用戶呈現(xiàn)數(shù)據(jù)。

span::before {
  content: attr(data-tooltip);
  //更多樣式規(guī)則
}

span:hover::before {
  display: inline-block;
}

使用JavaScript訪問數(shù)據(jù)屬性

在JavaScript中訪問數(shù)據(jù)屬性有三種方法。

使用getAttributesetAttribute

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

let restaurant = document.getElementById("restaurantId");
let ratings = restaurant.getAttribute("data-ratings");

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

restaurant.setAttribute("data-owner-name", "someName");

使用dataset屬性

訪問數(shù)據(jù)屬性的一種更簡單的方法是使用dataset屬性。此屬性返回一個(gè)DOMStringMap對(duì)象,其中包含每個(gè)自定義數(shù)據(jù)屬性的一個(gè)條目。使用dataset屬性時(shí),您需要注意一些事項(xiàng)。它需要三個(gè)步驟才能將自定義數(shù)據(jù)屬性轉(zhuǎn)換為DOMStringMap鍵:

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

然后可以使用存儲(chǔ)在對(duì)象中的駝峰式名稱作為鍵來訪問屬性,例如element.dataset.keyname。訪問屬性的另一種方法是使用方括號(hào)表示法,例如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;
}

此方法現(xiàn)在已在所有主要瀏覽器中受支持,您應(yīng)該優(yōu)先使用它來訪問自定義數(shù)據(jù)屬性。

使用jQuery

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

<span data-tooltip="簡單的解釋">Word</span>

從1.6版本開始,jQuery開始使用數(shù)據(jù)屬性的駝峰式版本?,F(xiàn)在,您可以使用以下代碼執(zhí)行相同的操作:

span::before {
  content: attr(data-tooltip);
  //更多樣式規(guī)則
}

span:hover::before {
  display: inline-block;
}

您應(yīng)該知道,jQuery還會(huì)嘗試在內(nèi)部將從數(shù)據(jù)屬性獲得的字符串轉(zhuǎn)換為合適的類型,例如數(shù)字、布爾值、對(duì)象、數(shù)組和null。

let restaurant = document.getElementById("restaurantId");
let ratings = restaurant.getAttribute("data-ratings");

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

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屬性的值仍然會(huì)提供舊的結(jié)果。

結(jié)論

在本教程中,我已經(jīng)介紹了關(guān)于HTML5數(shù)據(jù)屬性的所有重要內(nèi)容。除了使用屬性選擇器創(chuàng)建工具提示和設(shè)置元素樣式外,您還可以使用數(shù)據(jù)屬性來存儲(chǔ)和向用戶顯示其他數(shù)據(jù),例如有關(guān)未讀消息的通知等等。

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

以上是如何使用HTML5自定義數(shù)據(jù)屬性以及為什么的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何在node.js中提出HTTP請(qǐng)求? 如何在node.js中提出HTTP請(qǐng)求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請(qǐng)求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場(chǎng)景,但需手動(dòng)處理數(shù)據(jù)拼接和錯(cuò)誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請(qǐng)求;2.axios是基于Promise的第三方庫,語法簡潔且功能強(qiáng)大,支持async/await、自動(dòng)JSON轉(zhuǎn)換、攔截器等,推薦用于簡化異步請(qǐng)求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基于Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時(shí)復(fù)制副本,因此互不影響;引用類型如對(duì)象、數(shù)組和函數(shù)存儲(chǔ)的是內(nèi)存地址,指向同一對(duì)象的變量會(huì)相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助于編寫更穩(wěn)定可靠的代碼。

React與Angular vs Vue:哪個(gè)JS框架最好? React與Angular vs Vue:哪個(gè)JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個(gè)JavaScript框架最好?答案是根據(jù)需求選擇最適合的。1.React靈活自由,適合需要高度定制、團(tuán)隊(duì)有架構(gòu)能力的中大型項(xiàng)目;2.Angular提供完整解決方案,適合企業(yè)級(jí)應(yīng)用和長期維護(hù)的大項(xiàng)目;3.Vue上手簡單,適合中小型項(xiàng)目或快速開發(fā)。此外,是否已有技術(shù)棧、團(tuán)隊(duì)規(guī)模、項(xiàng)目生命周期及是否需要SSR也都是選擇框架的重要因素。總之,沒有絕對(duì)最好的框架,適合自己需求的就是最佳選擇。

JavaScript時(shí)間對(duì)象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時(shí)間對(duì)象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本周的JavaScript新聞!本周我們將重點(diǎn)關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時(shí)間對(duì)象獲得瀏覽器支持、GoogleChrome的更新以及一些強(qiáng)大的開發(fā)者工具。讓我們開始吧!Oracle與Deno的商標(biāo)之爭Oracle試圖注冊(cè)“JavaScript”商標(biāo)的舉動(dòng)引發(fā)爭議。Node.js和Deno的創(chuàng)建者RyanDahl已提交請(qǐng)?jiān)笗?,要求取消該商?biāo),他認(rèn)為JavaScript是一個(gè)開放標(biāo)準(zhǔn),不應(yīng)由Oracle

什么是緩存API?如何與服務(wù)人員使用? 什么是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請(qǐng)求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗(yàn)。1.它允許開發(fā)者手動(dòng)存儲(chǔ)如腳本、樣式表、圖片等資源;2.可根據(jù)請(qǐng)求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個(gè)緩存;4.通過ServiceWorker監(jiān)聽fetch事件實(shí)現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用于離線支持、加快重復(fù)訪問速度、預(yù)加載關(guān)鍵資源及后臺(tái)更新內(nèi)容;6.使用時(shí)需注意緩存版本控制、存儲(chǔ)限制及與HTTP緩存機(jī)制的區(qū)別。

處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機(jī)制,理解鏈?zhǔn)秸{(diào)用、錯(cuò)誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。1.鏈?zhǔn)秸{(diào)用通過.then()返回新Promise實(shí)現(xiàn)異步流程串聯(lián),每個(gè).then()接收上一步結(jié)果并可返回值或Promise;2.錯(cuò)誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,并可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個(gè)完成即返回)和Promise.allSettled()(等待所有完成)

利用Array.Prototype方法用于JavaScript中的數(shù)據(jù)操作 利用Array.Prototype方法用于JavaScript中的數(shù)據(jù)操作 Jul 06, 2025 am 02:36 AM

JavaScript數(shù)組內(nèi)置方法如.map()、.filter()和.reduce()可簡化數(shù)據(jù)處理;1).map()用于一對(duì)一轉(zhuǎn)換元素生成新數(shù)組;2).filter()按條件篩選元素;3).reduce()用于聚合數(shù)據(jù)為單一值;使用時(shí)應(yīng)避免誤用導(dǎo)致副作用或性能問題。

JS綜述:深入研究JavaScript事件循環(huán) JS綜述:深入研究JavaScript事件循環(huán) Jul 08, 2025 am 02:24 AM

JavaScript的事件循環(huán)通過協(xié)調(diào)調(diào)用棧、WebAPI和任務(wù)隊(duì)列來管理異步操作。1.調(diào)用棧執(zhí)行同步代碼,遇到異步任務(wù)時(shí)交由WebAPI處理;2.WebAPI在后臺(tái)完成任務(wù)后將回調(diào)放入相應(yīng)的隊(duì)列(宏任務(wù)或微任務(wù));3.事件循環(huán)檢查調(diào)用棧是否為空,若為空則從隊(duì)列中取出回調(diào)推入調(diào)用棧執(zhí)行;4.微任務(wù)(如Promise.then)優(yōu)先于宏任務(wù)(如setTimeout)執(zhí)行;5.理解事件循環(huán)有助于避免阻塞主線程并優(yōu)化代碼執(zhí)行順序。

See all articles