HTML5⾃定义属性之data-
HTML5 增加了⼀项新功能是,也就是data-*⾃定义属性。在HTML5中我们可以使⽤以data-为前缀来设置我们需要的⾃定义属性,来进⾏⼀些数据的存放。当然⾼级浏览器下可通过脚本进⾏定义和数据存取。在项⽬实践中⾮常有⽤。
<input type="button" value="按钮" data-index="10" data-index-color="red" >
在开始之前我们先来看下之前我是如何获取⾃定义属性的。
<script>
var oBtn=document.querySelector('input');
console.log(oBtn.value); //按钮
console.log(oBtn.index); //undefined
console.log(oBtn.dataIndex); //undefined
</script>
为什么后⾯2个出现的 undefined 其实也不⾜为奇,因为点后⾯跟的只允许时符合 W3C 规范,不符合的属性全被浏览器⼲掉了。但就是想获取⾃定义属性还是有办法的,代码如下:
<script>
var oBtn=document.querySelector('input');
console.Attribute('value')); //按钮
console.Attribute('index')); //10
console.Attribute('data-index')); //10
</script>
当然更改与删除分别是 ele.setAttribute(name,value) 与 veAttribute(name) ,此⽅法能在所有的现代浏览器中正常⼯作,但它不是HTML 5 的⾃定义data-*属性被使⽤⽬的,不然和我们以前使⽤的⾃定义属性就没有什么区别了,我在此也就不多说了。
现在HTML5新增了个dataset属性来存取data-*⾃定义属性的值。这个dataset属性是HTML5 JavaScrip
t API的⼀部分,⽤来返回⼀个所有选择元素data-属性的DOMStringMap对象。使⽤这种⽅法时,不是使⽤完整的属性名,如data-index来存取数据,应该去掉data-前缀。
还有⼀点特别注意的是:data-属性名如果包含了连字符,例如:data-index-color,连字符将被去掉,并转换为驼峰式的命名,前⾯的属性名转换后应该是:indexColor。代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>dataset</title>
</head>
<body>
<input type="button" value="按钮" index="10" data-index="10" data-index-color="red">
<script>
var oBtn=document.querySelector('input');
console.log(oBtn.dataset); //DOMStringMap对象
console.log(oBtn.dataset.index); //10
htmlbutton属性console.log(oBtn.dataset.indexColor); //red
console.log(oBtn.index); //undefined
console.log('name' in oBtn.dataset); //false
oBtn.dataset.name='zpf';
console.log('name' in oBtn.dataset); //true
oBtn.dataset.index=100;
console.log(oBtn.dataset.index); //100
oBtn.index=20;
console.log(oBtn.index); //20
</script>
</body>
</html>
顺便我们在看下以上代码的控制台输出图如下:
就上⾯看到的input⾥的index属性,我们直接⽤oBtn.index,这是undefined,我们⽤JS给他设置了oBtn.index=20,但他的页⾯中的标签⾥⾯的index还是等于10,如果我们想JS的设置获取出来的与HTML结构的表现相符只能通过setAttribute和getAttribute。
在来看看现在data-这个⽅法。设置、获取、更改三者修改的与HTML标签内部属性依依对应,⽽且操作起来⽐之前⽅便,所以说以后我们想保存某些属性在前⾯加个data-,这样的话这些属性值都会统⼀放在⼀个对象中进⾏管理与遍历。
<script>
for(var name in oBtn.dataset){
console.log(oBtn.dataset[name]);
}
</script>
如果你想删掉⼀个data-属性,可以这么做: delete el.dataset.id ; 或者 el.dataset.id = null ; 。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论