HTML data属性简介以及低版本浏览器兼容算法
實(shí)例
使用 data-* 屬性來(lái)嵌入自定義數(shù)據(jù):
<ul> <li data-animal-type="bird">Owl</li> <li data-animal-type="fish">Salmon</li> <li data-animal-type="spider">Tarantula</li> </ul>瀏覽器支持
| ? ? ?支持 | ? ? ?支持 | ? ? ?支持 | ? ? ?支持 | ? ? ?支持 |
所有主流瀏覽器都支持 data-* 屬性。
定義和用法
data-* 屬性用于存儲(chǔ)頁(yè)面或應(yīng)用程序的私有自定義數(shù)據(jù)。
data-* 屬性賦予我們?cè)谒?HTML 元素上嵌入自定義 data 屬性的能力。
存儲(chǔ)的(自定義)數(shù)據(jù)能夠被頁(yè)面的 JavaScript 中利用,以創(chuàng)建更好的用戶體驗(yàn)(不進(jìn)行 Ajax 調(diào)用或服務(wù)器端數(shù)據(jù)庫(kù)查詢)。
data-* 屬性包括兩部分:
- 屬性名不應(yīng)該包含任何大寫(xiě)字母,并且在前綴 "data-" 之后必須有至少一個(gè)字符
- 屬性值可以是任意字符串
注釋:用戶代理會(huì)完全忽略前綴為 "data-" 的自定義屬性。
語(yǔ)法
<element data-*="somevalue">屬性值
| somevalue | 規(guī)定屬性的值(以字符串)。 |
HTML adta-*屬性
==============【以上來(lái)自W3School】===================
【外加信息】
HTML標(biāo)簽可以添加自定義屬性來(lái)存儲(chǔ)和操作數(shù)據(jù)。但這樣做會(huì)導(dǎo)致html語(yǔ)法上不符合Html規(guī)范。HTML5規(guī)范里增加了一個(gè)自定義data屬性,自定義data屬性的用法非常的簡(jiǎn)單,就可以往HTML標(biāo)簽上添加任意以 "data-"開(kāi)頭的屬性,這些屬性頁(yè)面上是不顯示的,它不會(huì)影響到你的頁(yè)面布局和風(fēng)格,但它卻是可讀可寫(xiě)的。?
下面的一個(gè)代碼片段是一個(gè)有效的HTML5標(biāo)記:?
<div id="item" data-id='123'>11111</div>可是,怎么來(lái)讀取這些數(shù)據(jù)呢?你當(dāng)然可以遍歷頁(yè)面元素來(lái)讀取你想要的屬性,但jquery已經(jīng)內(nèi)置了方法來(lái)操作這些屬性。使用jQuery的.data()方法來(lái)訪問(wèn)這些"data-*" 屬性。其中一個(gè)方法就是 .data(obj),這個(gè)方法是在 jQuery1.4.3版本后出現(xiàn)的,它能返回相應(yīng)的data屬性。
?舉個(gè)例子,你可以用下面的寫(xiě)法讀取 data-id屬性值--123:?
你還可以在"data-*" 屬性里使用json語(yǔ)法,
<div id="item" data-id='{"game":"on"}'></div>你可以通過(guò)js直接訪問(wèn)這個(gè)數(shù)據(jù),通過(guò)json的key值,你能得到相應(yīng)的value:?var gameStatus= jQuery("#item").data('id').game;你也可以通過(guò).data(key,value)方法直接給"data-*" 屬性賦值。一個(gè)重要的你要注意的事情是,這些"data-*" 屬性應(yīng)該和它所在的元素有一定的關(guān)聯(lián),不要把它當(dāng)成存放任意東西的存儲(chǔ)工具。盡管"data-*" 是HTML5才出現(xiàn)的屬性,但jquery是通用的,所以,在非HTML5的頁(yè)面或?yàn)g覽器里,你仍然可以使用.data(obj)方法來(lái)操作"data-*" 數(shù)據(jù)。
================
==============【data屬性低版本兼容】==================
【DEMO】
【效果】
<!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>dataset</title><style>li{cursor: default;line-height: 1.8;}table{border-collapse: collapse;}th, td, caption{padding: 10px;border: 1px solid #ddd;font-size: 14px;}th{color: #999;}caption{font-size: 20px;font-weight: bold;border-bottom: none;}#card{position: absolute;top: 10px;left: 150px;}</style> </head> <body><ul><li data-id="123456" data-account-name="張威"data-name="張威" data-email="17777777777@163.com" data-mobile="17777777777">張威</li><li data-id="123457" data-account-name="JokerWill"data-name="JokerWill" data-email="13333333333@163.com" data-mobile="13333333333">JokerWill</li></ul><div id="card" style="display:none"><table><caption id="accountName"></caption><tr><th>姓名:</th><td id="name"></td></tr><tr><th>郵箱:</th><td id="email"></td></tr><tr><th>手機(jī):</th><td id="mobile"></td></tr></table></div><script>function $(id){return document.getElementById(id);}var lis = document.getElementsByTagName('li');for(var i = 0, li;li = lis[i]; i++){li.onmouseenter = function(event){event = event || window.event;var user = event.target|| event.srcElement;//var data = user.dataset;var data=get_dataset(user);$('accountName').innerText = data.accountName;$('name').innerText = data.name;$('email').innerText = data.email;$('mobile').innerText = data.mobile;$('card').style.display = 'block';};li.onmouseleave = function(event){$('card').style.display = 'none';};}//帶兼容的函數(shù)function get_dataset(ele){if(ele.dataset)return ele.dataset;else{//一下是兼容代碼var dataset = {};var ele_split = ele.outerHTML.split(" ");for(var i = 0,element; i < ele_split.length; i++) {element = ele_split[i];if (element.substring(0,4) == "data") { if (element.indexOf(">") != -1) { element = element.split(">")[0];};ele_key=element.split("=")[0].slice(5);ele_value=element.split("=")[1].slice(1,-1);if(ele_key.indexOf("-") == -1){dataset[ele_key] = ele_value;}else{ele_keys=ele_key.split("-");ele_key=ele_keys[0];for(i=1;i<ele_keys.length;i++){ele_key+=replaceReg(ele_keys[i]);} }};}return dataset;}}//正則表達(dá)式變換首字母大寫(xiě)function replaceReg(str){ var reg = /\b(\w)|\s(\w)/g; str = str.toLowerCase(); return str.replace(reg,function(m){return m.toUpperCase()}) }</script> </body> </html>【關(guān)鍵代碼】 //帶兼容的函數(shù) function get_dataset(ele){if(ele.dataset)return ele.dataset;else{//一下是兼容代碼var dataset = {};var ele_split = ele.outerHTML.split(" ");for(var i = 0,element; i < ele_split.length; i++) {element = ele_split[i];if (element.substring(0,4) == "data") { if (element.indexOf(">") != -1) { element = element.split(">")[0];};ele_key=element.split("=")[0].slice(5);ele_value=element.split("=")[1].slice(1,-1);if(ele_key.indexOf("-") == -1){dataset[ele_key] = ele_value;}else{ele_keys=ele_key.split("-");ele_key=ele_keys[0];for(i=1;i<ele_keys.length;i++){ele_key+=replaceReg(ele_keys[i]);} }};}return dataset;}}
轉(zhuǎn)載于:https://www.cnblogs.com/zwwill/p/7391398.html
總結(jié)
以上是生活随笔為你收集整理的HTML data属性简介以及低版本浏览器兼容算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Windows 7 在资源管理器中显示软
- 下一篇: WWDC2014开源