详解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让div随鼠标移动而抖动起来
Feb 10 HTML / CSS
纯CSS实现设置半个字符的样式
Jul 03 HTML / CSS
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
Mar 17 HTML / CSS
css3如何绘制一个圆圆的loading转圈动画
Jan 09 HTML / CSS
css3 transform导致子元素固定定位变成绝对定位的方法
Mar 06 HTML / CSS
HTML5 visibilityState属性详细介绍和使用实例
May 03 HTML / CSS
html5桌面通知(Web Notifications)实例解析
Jul 07 HTML / CSS
html5+css3进度条倒计时动画特效代码【推荐】
Mar 08 HTML / CSS
HTML5进阶段内联标签汇总(小篇)
Jul 13 HTML / CSS
a标签下载链接的简单实现
Sep 13 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
Mar 01 HTML / CSS
详解如何在登录过期后跳出Ifram框架
Sep 10 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 curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
JS实现div居中示例
2014/04/17 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
Vue计算属性的使用
2017/08/04 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
js实现复制功能(多种方法集合)
2018/01/06 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python sys模块sys.path使用方法示例
2013/12/04 Python
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
python中zip()方法应用实例分析
2016/04/16 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Python如何使用字符打印照片
2020/01/03 Python
python 下载文件的多种方法汇总
2020/11/17 Python
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
专科毕业生就业推荐信
2013/11/01 职场文书
护理专业自荐书
2014/06/04 职场文书
大学生入党自传2015
2015/06/26 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript