HTML5 data-* 自定义属性

  在HTML5中添加了data-*的方式来自定义属性,所谓data-*实际上就是data-前缀加上自定义的属性名,使用这样的结构可以进行数据存放。使用data-*可以解决自定义属性混乱无管理的现状。

  读写方式

  data-*有两种设置方式,可以直接在HTML元素标签上书写

<div id="test" data-age="24">
	Click Here
</div>

  其中的data-age就是一种自定义属性,当然我们也可以通过JavaScript来对其进行操作,HTML5中元素都会有一个dataset的属性,这是一个DOMStringMap类型的键值对集合

var test = document.getElementById('test');
test.dataset.my = 'Byron';

  这样就为div添加了一个data-my的自定义属性,使用JavaScript操作dataset有两个需要注意的地方

  1.我们在添加或读取属性的时候需要去掉前缀data-*,像上面的例子我们没有使用test.dataset.data-my='Byron';的形式。

  2.如果属性名称中还包含连字符(-),需要转成驼峰命名方式,但如果在CSS中使用选择器,我们需要使用连字符格式

  为刚才代码追加写内容

<style type="text/css">
	[data-birth-date] {
		background-color: #0f0;
		width: 100px;
		margin: 20px;
	}
</style>
test.dataset.birthDate = '19890615';

  这样我们通过JavaScript设置了data-birth-date自定义属性,在CSS样式表为div添加了一些样式,看看效果

  读取的时候也是通过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);
}

  getAttribute/setAttribute

  有些同学可能会问这和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-age')); //24
console.log(test.getAttribute('data-birth-date')); //19890516
console.log(test.dataset.age); //24
console.log(test.dataset.sex); //male

  这样我们可以看出,两者都把属性设置到了attribute上(废话,要不人家能叫自定义属性),也就是说getAttribute/setAttribute可以操作所有的dataset内容,dataset内容只是attribute的一个子集,特殊就特殊在命名上了,但是dataset内只有带有data-前缀的属性(没有age=25那个)。

  那么为什么我们还要用data-*呢,一个最大的好处是我们可以把所有自定义属性在dataset对象中统一管理,遍历啊神马的都哦很方便,而不至于零零散散了,所以用用还是不错的。

  浏览器兼容性

  比较不好的消息就是data-*的浏览器兼容性情况十分不乐观

  Internet Explorer 11+

  Chrome 8+

  Firefox 6.0+

  Opera 11.10+

  Safari 6+

  其中IE11+简直就是亮瞎小伙伴的眼,看来要想全面使用此属性路漫漫其修远矣

本站原创内容,转载请注明来源:https://www.liutonghui.com/47

基于jQuery+JSON的省市区三级无刷新联动
上一篇 2013-12-09
成功申诉回所有QQ号
下一篇 2013-12-14

评论列表(0条)

  • 暂无评论

发表评论

captcha

相关推荐

  • PHP隐藏文件真实下载地址防盗链功能

      这个方案核心是隐藏文件真实地址,文件存放在网站根目录外(无法直接HTTP访问),或用权限锁定,只允许PHP。读取用动态临时下载链接替代,定时随机变更链接,随机密钥不可预测,过期自动失效。   校验来源域名、IP地址、链接有效期、签名,彻底防止盗链、批量下载、服务器过载。单IP限速、单文件并发下载限制、错误次数锁定,防止服务器过载。PHP代理输出文件,支持大文件断点续传   1.配置文件(config.php)统一管理密钥、有效期、限......

    2013-12-06
    21440
  • 成功申诉回所有QQ号

      我有五个QQ号,三个8位的,两个9位的,都设置了二代密保,并把密保信息截图存在移动硬盘里。今年7月移动硬盘突然不识别,后来没办法只好格式化重新分区,虽然移动硬盘修好了,但所有的文件全部丢失,也包括QQ密保。这里要说一句,这也使我对本来就无好感的三星更加失望。   由于密保不记得了,修改QQ密码也需要验证密保,存有很大的安全隐患和不便。有天突然发现弃用多年的一个9位号被人用手机登录了,这个号我多年不用了,密码早就忘了,但还记得以前设置......

    2013-12-14
    25091
  • PHP生成HTML静态页原理

      在PHP中生成HTML文件静态页,在后续的访问可以直接加载静态文件而无需再次执行PHP脚本。这可以提高网站性能,减轻服务器负担,并改善页面加载速度。   用一个简单的小项目来说明PHP生成HTML静态页原理,包含:模板分离、自动创建目录、生成静态页、更新静态页、删除静态页、生成列表页+详情页、防重复生成、错误提示等功能。   项目结构 / ├── template/ # 模板文件夹 │ ├── index.h......

    2014-02-17
    15990
  • CSS布局 ——从display,position, float属性谈起

      页面布局,或者是在页面上做些小效果的时候经常会用到display,position和float属性,如果对它们不是很了解的话,很容易出现一些莫名其妙的效果,痛定思痛读了《CSS Mastery》后总结一下。   让我们从基础的CSS知识谈起,相信很多初学者和小弟一样不明白CSS原理,一味追求效果,结果页面漏洞百出,错误匪夷所思,关于盒模型我就不多说了,网上很多,注意一下IE和其他浏览器(W3C规范)的区别就好了。   块级元素与行内......

    2014-09-05
    12770
  • 站长做自媒体

      站长做自媒体是这几年行业发展的趋势,也是每个站长必须要考虑和面对的问题。其实网站运营和自媒体运营,本质上都属于内容服务运营,核心思路是相通的,区别就是运营载体不同,流量获取的渠道和方式不一样。   相对来说,网站运营的门槛和运营难度要高很多。想要做好一个网站,要对前端,后端,数据库,服务器,SEO等多项专业技术有一定的了解。不仅需要自费搭建独立域名和服务器,搭建一套稳定完善的网站系统,更需要长期大量的进行数据更新维护。尤其是当下搜......

    2017-06-21
    21210
  • 自己动手换iPhone电池

      我这个iPhone 5S用了好几年了,电池衰减了很多,充满电用不到一上午就没电了。就在京东买了个电池准备自己换,选择自己换电池的原因是,线下店好多都是杂牌电池,还有个原因是,我想自己亲手拆开手机看看,了解了解手机内部结构。   用电池自带的工具,很快拆开了手机。因为iPhone 5S是后盖和边框一体成型的金属板,拆机的方式是撬开屏幕,这又是苹果很拉的设计,就为了一体化的设计就要提高拆机难度。用吸盘和撬板弄了挺长时间才把屏幕撬开。需......

    2018-05-19
    21590
  • 实现自动高度的几种 CSS 方法

      在前端开发中,经常需要使元素的高度自动调整,以适应其内容的情况。以下是一些常见的 CSS 使用方法:   1. 使用 height: auto;:   将元素的高度设置为 auto,这是元素高度的默认值。这样,元素的高度将根据其内容自动调整。 .auto-height { height: auto; }   2. 使用 overflow: auto; 或 overflow: hidden;:   如果希望元素的高度能够自动适应......

    2020-12-11
    18350
  • ThinkPHP文件上传类FileSystem自定义生成年月日目录

      FileSystem 是一个非常好用的文件上传扩展类,结合 Thinkphp 使用可以轻松的完成文件上传功能的开发。但是默认情况下 FileSystem 是按照&ldquo;年月日&rdquo;来生成上传日期目录的,长期使用下来就会有大量的&ldquo;Ymd&rdquo;目录,不方便管理,像我平时更新内容不多,如果以&ldquo;Ym&rdquo;的格式生成目录,按同一年同一月上传的文件放在一个日期目录中就方便管理多了。   需要......

    2023-04-23
    10342