详解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截取字符串实例代码【推荐】
Jun 07 HTML / CSS
一款纯css3实现的动画加载导航
Oct 08 HTML / CSS
利用CSS3伪元素实现逐渐发光的方格边框
May 07 HTML / CSS
HTML5中实现拖放效果无须借助javascript
Dec 26 HTML / CSS
html5 CSS过度-webkit-transition使用介绍
Jul 02 HTML / CSS
用HTML5制作一个简单的弹力球游戏
May 12 HTML / CSS
整理HTML5中表单的常用属性及新属性
Feb 19 HTML / CSS
Canvas 文本填充线性渐变的使用详解
Jun 22 HTML / CSS
血轮眼轮回眼特效 html+css
Mar 31 HTML / CSS
z-index不起作用
Mar 31 HTML / CSS
CSS 鼠标选中文字后改变背景色的实现代码
May 21 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设计模式 Bridge (桥接模式)
2011/06/26 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
php实现快速排序的三种方法分享
2014/03/12 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
jQuery中end()方法用法实例
2015/01/08 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
js实现旋转木马效果
2017/03/17 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
Python中多线程的创建及基本调用方法
2016/07/08 Python
Python快速排序算法实例分析
2017/11/29 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
python计算导数并绘图的实例
2020/02/29 Python
Python实现EM算法实例代码
2020/10/04 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
canvas烟花特效锦集
2018/01/17 HTML / CSS
农场厂长岗位职责
2013/12/28 职场文书
奉献演讲稿范文
2014/05/21 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
勇敢的心观后感
2015/06/09 职场文书
小学班级标语口号大全
2015/12/26 职场文书