- 2018-05-15 創(chuàng)建
HTML5 data-* 自定義屬性
HTML5中添加了data-的方式來自定義屬性,所謂data-實際上上就是data-前綴加上自定義的屬性名,使用這樣的結(jié)構(gòu)可以進(jìn)行數(shù)據(jù)存放伏恐。使用data-*可以解決自定義屬性混亂無管理的現(xiàn)狀檬姥。
讀寫方式
data-*有兩種設(shè)置方式饵筑,可以直接在HTML元素標(biāo)簽上書寫
<div id="test" data-age="24">
Click Here
</div>
其中的data-age就是一種自定義屬性,當(dāng)然我們也可以通過JavaScript來對其進(jìn)行操作察净,HTML5中元素都會有一個dataset的屬性,這是一個DOMStringMap類型的鍵值對集合
var test = document.getElementById('test');
test.dataset.my = 'Byron';
這樣就為div添加了一個data-my的自定義屬性盼樟,使用JavaScript操作dataset有兩個需要注意的地方
我們在添加或讀取屬性的時候需要去掉前綴data-*氢卡,像上面的例子我們沒有使用test.dataset.data-my = 'Byron';的形式。
如果屬性名稱中還包含連字符(-)晨缴,需要轉(zhuǎn)成駝峰命名方式译秦,但如果在CSS中使用選擇器,我們需要使用連字符格式
為剛才代碼追加寫內(nèi)容
<style type="text/css">
[data-birth-date]
{
background-color: #0f0;
width:100px;
margin:20px;
}
</style>
test.dataset.birthDate = '19890615';
這樣我們通過JavaScript設(shè)置了data-birth-date自定義屬性击碗,在CSS樣式表為div添加了一些樣式筑悴,看看效果
讀取的時候也是通過dataset對象,使用”.”來獲取屬性稍途,同樣需要去掉data-前綴阁吝,連字符需要轉(zhuǎn)化為駝峰命名
var test = document.getElementById('test');
test.dataset.my = 'Byron';
test.dataset.birthDate = '19890615';
test.onclick = function () {
alert(this.dataset.my + ' ' + this.dataset.age+' '+this.dataset.birthDate);
}
getAttribute/setAttribute
有些同學(xué)可能會問這和getAttribute/setAttribute除了命名有什么區(qū)別嗎,我們來看一下
var test = document.getElementById('test');
test.dataset.birthDate = '19890615';
test.setAttribute('age', 25);
test.setAttribute('data-sex', 'male');
console.log(test.getAttribute('data-age')); //24
console.log(test.getAttribute('data-birth-date')); //19890516
console.log(test.dataset.age); //24
console.log(test.dataset.sex); //male
這樣我們可以看出械拍,兩者都把屬性設(shè)置到了attribute上(廢話突勇,要不人家能叫自定義屬性),也就是說getAttribute/setAttribute可以操作所有的dataset內(nèi)容坷虑,dataset內(nèi)容只是attribute的一個子集甲馋,特殊就特殊在命名上了,但是dataset內(nèi)只有帶有data-前綴的屬性(沒有age=25那個)迄损。
那么為什么我們還要用data-*呢摔刁,一個最大的好處是我們可以把所有自定義屬性在dataset對象中統(tǒng)一管理,遍歷啊神馬的都哦很方便,而不至于零零散散了共屈,所以用用還是不錯的绑谣。
兼容性
比較不好的消息就是data-*的瀏覽器兼容性情況十分不樂觀
Internet Explorer 11+
Chrome 8+
Firefox 6.0+
Opera 11.10+
Safari 6+
其中IE11+簡直就是亮瞎小伙伴的眼,看來要想全面使用此屬性路漫漫其修遠(yuǎn)矣