HTML 5 增加了一项新功能是 自定义数据属性 ,也就是  data-* 自定义属性。在HTML5中我们可以使用以 data- 为前缀来设置我们需要的自定义属性,来进行一些数据的存放。当然高级浏览器下可通过脚本进行定义和数据存取。在项目实践中非常有用。

例如:

html 代码:
  1. <div id = "user" data-uid = "12345" data-uname = "愚人码头" > </div>

使用attribute方法存取 data-* 自定义属性的值

使用attributes方法存取 data-* 自定义属性的值非常方便:

javascript 代码:
  1. // 使用getAttribute获取 data- 属性
  2. var user = document . getElementById ( 'user' ) ;
  3. var userName = plant . getAttribute ( 'data-uname' ) ; // userName = '愚人码头'
  4. var userId = plant . getAttribute ( 'data-uid' ) ; // userId = '12345'
  5. // 使用setAttribute设置 data- 属性
  6. user . setAttribute ( 'data-site' , 'http://www.css88.com' ) ;

此方法能在所有的现代浏览器中正常工作,但它不是HTML 5 的自定义 data-*属性被使用目的,不然和我们以前使用的自定义属性就没有什么区别了,例如:

html 代码:
  1. <div id = "user" uid = "12345" uname = "愚人码头" > </div>
  2. <script>
  3. // 使用getAttribute获取 data- 属性
  4. var user = document . getElementById ( 'user' ) ;
  5. var userName = plant . getAttribute ( 'uname' ) ; // userName = '愚人码头'
  6. var userId = plant . getAttribute ( 'uid' ) ; // userId = '12345'
  7. // 使用setAttribute设置 data- 属性
  8. user . setAttribute ( 'site' , 'http://www.css88.com' ) ;
  9. </script>

这种“原始”的自定义属性和上面 data-* 自定义属性没什么区别,知识属性名不一样。

dataset属性存取data-*自定义属性的值

这种方式通过访问一个元素的 dataset 属性来存取 data-* 自定义属性的值。这个 dataset 属性是HTML5 JavaScript API的一部分,用来返回一个所有选择元素 data- 属性的DOMStringMap对象。

使用这种方法时,不是使用完整的属性名,如 data-uid 来存取数据,应该去掉data- 前缀。

还有一点特别注意的是: data- 属性名如果包含了连字符,例如:data-date-of-birth ,连字符将被去掉,并转换为驼峰式的命名,前面的属性名转换后应该是: dateOfBirth 。

html 代码:
  1. <div id="user" data-id="1234567890" data-name="愚人码头" data-date-of-birth>码头</div>
  2. <script type="text/javascript">
  3. var el = document.querySelector('#user');
  4. console.log(el.id); // 'user'
  5. console.log(el.dataset);//一个DOMStringMap
  6. console.log(el.dataset.id); // '1234567890'
  7. console.log(el.dataset.name); // '愚人码头'
  8. console.log(el.dataset.dateOfBirth); // ''
  9. el.dataset.dateOfBirth = '1985-01-05'; // 设置data-date-of-birth的值.
  10. console.log('someDataAttr' in el.dataset);//false
  11. el.dataset.someDataAttr = 'mydata';
  12. console.log('someDataAttr' in el.dataset);//true
  13. </script>

如果你想删掉一个 data-属性 ,可以这么做: delete el . dataset . id ;  或者 el .dataset . id = null ;  。

看起来很美,哈哈,但是不幸的是,新的 dataset 属性只有在Chrome 8+ Firefox(Gecko) 6.0+ Internet Explorer 11+ Opera 11.10+ Safari 6+浏览器中实现,所以在此期间最好用的getAttribute和setAttribute来操作。

关于data-属性选择器

在实际开发时,您可能会发现它很有用,你可以根据自定义的 data- 属性选择相关的元素。例如使用querySelectorAll选择元素:

javascript 代码:
  1. // 选择所有包含 'data-flowering' 属性的元素
  2. document . querySelectorAll ( '[data-flowering]' ) ;
  3. // 选择所有包含 'data-text-colour' 属性值为red的元素
  4. document . querySelectorAll ( '[data-text-colour="red"]' ) ;

同样的我们也可以通过 data- 属性值对相应的元素设置CSS样式,例如下面这个例子:

html 代码:
  1. <style type ="text/css">
  2. .user {
  3. width : 256px ;
  4. height : 200px ;
  5. }
  6. .user[data-name='feiwen'] {
  7. color : brown
  8. }
  9. .user[data-name='css'] {
  10. color : red
  11. }
  12. </style>
  13. <div class = "user" data-id = "123" data-name = "feiwen" > 1 </div>
  14. <div class = "user" data-id = "124" data-name = "css" > 码头 </div>

更多参阅:

http://ejohn.org/blog/html-5-data-attributes/

demo:

http://html5demos.com/dataset

HTML 5 的data-* 自定义属性的更多相关文章

  1. data自定义属性获取方法和设置

    <!--原生获取方法--> <div data-id="id=1"></div> <script> //js原生获取方法 var i ...

  2. 关于data自定义属性

    新的HTML5标准允许你在普通的元素标签里,嵌入类似data-*的属性,来实现一些简单数据的存取.它的数量不受限制,并且也能由JavaScript动态修改,也支持CSS选择器进行样式设置.这使得dat ...

  3. jquery中data()和js中dataset属性的区别

    INTRO html的标签属性data-允许用户自定义属性.原生javascript和jquery分别定义了dataset属性和data()方法对标签中的data属性进行操作. 取值: 如我们定义这样 ...

  4. data-*设置自定义属性注意事项一

    本人才疏学浅,偶遇一个data自定义属性应当注意的小问题,随笔记下. 1.看下面代码:首先在a标签设置自定义两个属性 <a class="btn" href="ja ...

  5. Dom新find

    1.HTML标签和属性是不区分大小写的,但JS是区分大小写的:所以(1)HTML专有的接口的属性应该以小写字母开头,如果属性名由多个单词构成,第二个及接下来的每个单词的首字母都要大写.(2)有些HTM ...

  6. 前端笔记之JavaScript(七)深入函数&DOM那点事

    一.函数补充 1.1 arguments类数组对象 arguments 是一个对应于传递给函数的参数的类数组对象. 在函数中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们. ...

  7. 微信小程序基础语法总结

    本文介绍微信小程序语法 配置文件 app.json的配置(全局) { // 用来配置页面的路径 "pages":[ "pages/index/index", / ...

  8. android -------- Data Binding的使用 ( 六) 自定义属性

    今天来说说DataBinding在自定义属性的使用 默认的android命名空间下,我们会发现并不是所有的属性都能直接通过data binding进行设置,比如margin,padding,还有自定义 ...

  9. JQUERY获取html标签自定义属性值或data值

    //获取属性值 1 <div id="text" value="黑哒哒的盟友"><div> jQuery取值: $("#tex ...

  10. 关于使用data()获取自定义属性出现undefined的说明

    这应该是这个函数的一个bug,没有考虑到驼峰式的写法,当我写成驼峰式,即是有大小写的变量时就会出现没有定义的情况. 今天写个交互,需要用到自定义属性,因为这个自定义属性是当作字段用的,就直接用了字段名 ...

随机推荐

  1. 李洪强漫谈iOS开发[C语言-051]-判断整数位数

  2. JAVA集合迭代遍历和特性介绍

    数组.集合:都是一种容器,用一个对象管理多个对象:数组不能自动增长:只能存放同类型的元素 集合能自动扩容:部分集合允许存放不同类型的元素: 1.List: 有顺序的,允许存放重复的元素: 遍历:for ...

  3. HTML5 表单属性

    form 属性 form 属性规定输入域所属的一个或多个表单. 注释:form 属性适用于所有 <input> 标签的类型. form 属性必须引用所属表单的 id: 实例 <for ...

  4. :nth-child(an+b)

    语法: :nth-child(an+b)为什么选择它,因为我认为,这个选择器是最多学问的一个了.很可惜,据我所测,目前能较好地支持她的只有Opera9+和Safari3+. 描述: 伪类:nth-ch ...

  5. hdu-acm steps 命运

    /*表示刚刚接触dp.这是我接触到的第3道dp题,刚开始以为是要用dfs+dp,后来栈溢出...仔细想想, 其实这道题和数塔差不多,只要每步都得到最优子结构,最后结果一定是最优的.题目的初始化要做好, ...

  6. html5学习小结,float练习。

    经过两天的H5学习之后,做了一下float属性的练习,要做出来的效果为: 下面为代码部分,所用到的知识不多,不过才现在刚开始,以后要学的东西还有很多,大家继续加油! <!DOCTYPE html ...

  7. 【HDU4630 No Pain No Game】 dp思想+线段树的离线操作

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给你n个数据范围在[1,n]中的数,m个操作,每个操作一个询问[L,R],让你求区间[L, ...

  8. JQ 队列

    <div class="divtt"> <div class="divtest"></div> </div> & ...

  9. Xcode 添加类前缀

    按照如下图所示操作后,接下来创建的类就会带有MN的前缀;如果想更换前缀,则替换MN即可!

  10. Educational Codeforces Round 16 A B C E

    做题太久也有点累了..难题不愿做 水题不愿敲..床上一躺一下午..离下一场div2还有点时间 正好有edu的不计分场 就做了一下玩玩了 D是个数学题 F是个AC自动机 都没看明白 留待以后补 A 给出 ...