详解HTML5 data-* 自定义属性


Posted in HTML / CSS onJanuary 24, 2018

在jQuery的attr与prop提到过在IE9之前版本中如果使用property不当会造成内存泄露问题,而且关于Attribute和Property的区别也让人十分头痛,在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添加了一些样式,看看效果

详解HTML5 data-* 自定义属性

详解HTML5 data-* 自定义属性

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

详解HTML5 data-* 自定义属性

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

详解HTML5 data-* 自定义属性

详解HTML5 data-* 自定义属性

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

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

浏览器兼容性

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

  1. Internet Explorer 11+
  2. Chrome 8+
  3. Firefox 6.0+
  4. Opera 11.10+
  5. Safari 6+

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
彻底弄明白CSS3的Media Queries(跨平台设计)
Jul 27 HTML / CSS
css3制作动态进度条以及附加jQuery百分比数字显示
Dec 13 HTML / CSS
css3弹性盒模型(Flexbox)详细介绍
Oct 08 HTML / CSS
浅谈CSS3 动画卡顿解决方案
Jan 02 HTML / CSS
自定义html标记替换html5新增元素
Oct 17 HTML / CSS
分享全球十款超强HTML5开发工具
May 14 HTML / CSS
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
Nov 05 HTML / CSS
基于html5绘制圆形多角图案
Apr 21 HTML / CSS
HTML5单页面手势滑屏切换原理分析
Jul 10 HTML / CSS
canvas 阴影和图形变换的示例代码
Jan 02 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
Jan 29 HTML / CSS
HTML中的表单Form实现居中效果
May 25 HTML / CSS
详解html5 shiv.js和respond.min.js
Jan 24 #HTML / CSS
浅析HTML5:'data-'属性的作用
Jan 23 #HTML / CSS
HTML5 常见面试题之PC端和移动端区别介绍
Jan 22 #HTML / CSS
浅谈html5 video 移动端填坑记
Jan 15 #HTML / CSS
html5 Canvas实现图片旋转的示例
Jan 15 #HTML / CSS
详解html5页面 rem 布局适配方法
Jan 12 #HTML / CSS
详解html5 canvas 微信海报分享(个人爬坑)
Jan 12 #HTML / CSS
You might like
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
Bootstrap table使用方法总结
2017/05/10 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
详解如何用webpack4从零开始构建react开发环境
2019/01/27 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
Python实现字典的遍历与排序功能示例
2017/12/23 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
使用python模拟命令行终端的示例
2019/08/13 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
Python面向对象封装操作案例详解
2019/12/31 Python
如何解决安装python3.6.1失败
2020/07/01 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
高一化学教学反思
2014/02/05 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js