在HTML5中添加了data-的方式来自定义属性,所谓data-实际上上就是data-前缀加上自定义的属性名,使用这样的结构可以进行数据存放。使用data-*可以解决自定义属性混乱无管理的现状。
设置方式
data-*有两种设置方式:
1.可以直接在HTML元素标签上书写
<div id="test" data-age="24">
Click Here
</div>
其中的data-age就是一种自定义属性,当然我们也可以通过JavaScript来对其进行操作,HTML5中元素都会有一个dataset的属性,这是一个DOMStringMap类型的键值对集合。
2.通过js设置
var test = document.getElementById('test')
test.dataset.my = 'Byron'
// 这样就为div添加了一个data-my的自定义属性。
使用JavaScript操作dataset有两个需要注意的地方:
a.在添加或读取属性的时候需要去掉前缀data-*,像上面的例子没有使用test.dataset.data-my = 'Byron';的形式
b.如果属性名称中还包含连字符(-),需要转成驼峰命名方式,但如果在CSS中使用选择器,需要使用连字符格式
// js中
test.dataset.birthDate = '19890615' // 在dom显示的为 data-birth-date
// css中
<style type="text/css">
[data-birth-date] {
background-color: #0f0;
width:100px;
margin:20px;
}
</style>
读取的时候也是通过dataset对象,使用”.”来获取属性,同样需要去掉data-前缀,连字符需要转化为驼峰命名
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);
}
data-*和getAttribute()和setAttribute()区别
var test = document.getElementById('test');
test.dataset.birthDate = '19890615';
test.setAttribute('age', 25);
test.setAttribute('data-sex', 'male');
console.log(test.getAttribute('data-birth-date')); // 19890516
console.log(test.dataset.birthDate); // 19890516
console.log(test.getAttribute('age')); //24
console.log(test.dataset.age); //undefined
console.log(test.dataset.sex); //male
可以看出 通过dataset设置的属性可以通过getAttribute(但是要加data- 而且要用链接-)和test.dataset.birthDate获取
通过setAttribute设置的属性 如果是直接设置没有加data-的属性,可以通过getAttribute(属性)获取
通过setAttribute设置的属性 如果是设置加data-的属性,可以通过getAttribute(data-属性)获取
可以通过getAttribute()和setAttribute()设置和获取标签属性,通过removeAttribute()移除标签的属性
getAttribute 获取标签属性 (所有的标签属性都可以获取)
下面就详细介绍四种方法获取data-*属性的值
<li id="getId" data-id="122" data-vice-id="11">获取id</li> 需要获取的就是data-id 和 dtat-vice-id的值
一:getAttribute()方法
const getId = document.getElementById('getId');
// //getAttribute()取值属性
console.log(getId.getAttribute("data-id")); // 122
console.log(getId.getAttribute("data-vice-id")); // 11
// //setAttribute()赋值属性
getId.setAttribute("data-id","48");
console.log(getId.getAttribute("data-id"));//48
二:dataset()方法
//data-前缀属性可以在JS中通过dataset取值,更加方便
console.log(getId.dataset.id);//112
//data-vice-id连接取值使用驼峰命名法取值
console.log(getId.dataset.viceId);//11
//赋值
getId.dataset.id = "113";//113
getId.dataset.viceId--;//10
//新增data属性
getId.dataset.id2 = "100";//100
//删除,设置成null,或者delete
getId.dataset.id2 = null;//null
delete getId.dataset.id2;//undefind
三:jquery data()方法
var id = $("#getId").data("id"); //122
var viceId = $("#getId").data("vice-id"); //11
//赋值
$("#getId").data("id","100");//100
四:jquery attr()方法
var id = $("#getId").attr("data-id"); //122
var viceId = $("#getId").attr("data-vice-id"); //11
//赋值
$("#getId").attr("data-id","100");//100
另外:jquery中的data和attr不要混用。