实例

使用 data-* 属性来嵌入自定义数据:

<ul>
<li data-animal-type="bird">Owl</li>
<li data-animal-type="fish">Salmon</li>
<li data-animal-type="spider">Tarantula</li>
</ul>

浏览器支持

IE Firefox Chrome Safari Opera
     支持      支持      支持      支持      支持

所有主流浏览器都支持 data-* 属性。

定义和用法

data-* 属性用于存储页面或应用程序的私有自定义数据。

data-* 属性赋予我们在所有 HTML 元素上嵌入自定义 data 属性的能力。

存储的(自定义)数据能够被页面的 JavaScript 中利用,以创建更好的用户体验(不进行 Ajax 调用或服务器端数据库查询)。

data-* 属性包括两部分:

  • 属性名不应该包含任何大写字母,并且在前缀 "data-" 之后必须有至少一个字符
  • 属性值可以是任意字符串

注释:用户代理会完全忽略前缀为 "data-" 的自定义属性。

语法

<element data-*="somevalue">

属性值

描述
somevalue 规定属性的值(以字符串)。

HTML adta-*属性

==============【以上来自W3School】===================

【外加信息】

HTML标签可以添加自定义属性来存储和操作数据。但这样做会导致html语法上不符合Html规范。HTML5规范里增加了一个自定义data属性,自定义data属性的用法非常的简单,就可以往HTML标签上添加任意以 "data-"开头的属性,这些属性页面上是不显示的,它不会影响到你的页面布局和风格,但它却是可读可写的。

下面的一个代码片段是一个有效的HTML5标记:

  1. <div id="item" data-id='123'>11111</div>

可是,怎么来读取这些数据呢?你当然可以遍历页面元素来读取你想要的属性,但jquery已经内置了方法来操作这些属性。使用jQuery的.data()方法来访问这些"data-*" 属性。其中一个方法就是 .data(obj),这个方法是在 jQuery1.4.3版本后出现的,它能返回相应的data属性。

举个例子,你可以用下面的写法读取 data-id属性值--123:

  1. var myid= jQuery("#item").data('id');

你还可以在"data-*" 属性里使用json语法,

  1. <div id="item" data-id='{"game":"on"}'></div>

你可以通过js直接访问这个数据,通过json的key值,你能得到相应的value:

  1. var gameStatus= jQuery("#item").data('id').game;

你也可以通过.data(key,value)方法直接给"data-*" 属性赋值。一个重要的你要注意的事情是,这些"data-*" 属性应该和它所在的元素有一定的关联,不要把它当成存放任意东西的存储工具。尽管"data-*" 是HTML5才出现的属性,但jquery是通用的,所以,在非HTML5的页面或浏览器里,你仍然可以使用.data(obj)方法来操作"data-*" 数据。

================

==============【data属性低版本兼容】==================

【DEMO】

【效果】

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>dataset</title>
  6. <style>
  7. li{cursor: default;line-height: 1.8;}
  8. table{border-collapse: collapse;}
  9. th, td, caption{padding: 10px;border: 1px solid #ddd;font-size: 14px;}
  10. th{color: #999;}
  11. caption{font-size: 20px;font-weight: bold;border-bottom: none;}
  12. #card{position: absolute;top: 10px;left: 150px;}
  13. </style>
  14. </head>
  15. <body>
  16. <ul>
  17. <li data-id="123456" data-account-name="张威"
  18. data-name="张威" data-email="17777777777@163.com"
  19. data-mobile="17777777777">张威</li>
  20. <li data-id="123457" data-account-name="JokerWill"
  21. data-name="JokerWill" data-email="13333333333@163.com"
  22. data-mobile="13333333333">JokerWill</li>
  23. </ul>
  24. <div id="card" style="display:none">
  25. <table>
  26. <caption id="accountName"></caption>
  27. <tr><th>姓名:</th><td id="name"></td></tr>
  28. <tr><th>邮箱:</th><td id="email"></td></tr>
  29. <tr><th>手机:</th><td id="mobile"></td></tr>
  30. </table>
  31. </div>
  32. <script>
  33. function $(id){
  34. return document.getElementById(id);
  35. }
  36. var lis = document.getElementsByTagName('li');
  37. for(var i = 0, li;li = lis[i]; i++){
  38. li.onmouseenter = function(event){
  39. event = event || window.event;
  40. var user = event.target|| event.srcElement;
  41. //var data = user.dataset;
  42. var data=get_dataset(user);
  43. $('accountName').innerText = data.accountName;
  44. $('name').innerText = data.name;
  45. $('email').innerText = data.email;
  46. $('mobile').innerText = data.mobile;
  47. $('card').style.display = 'block';
  48. };
  49. li.onmouseleave = function(event){
  50. $('card').style.display = 'none';
  51. };
  52. }
  53. //带兼容的函数
  54. function get_dataset(ele){
  55. if(ele.dataset)
  56. return ele.dataset;
  57. else{
  58. //一下是兼容代码
  59. var dataset = {};
  60. var ele_split = ele.outerHTML.split(" ");
  61. for(var i = 0,element; i < ele_split.length; i++)
  62. {
  63. element = ele_split[i];
  64. if (element.substring(0,4) == "data") {
  65. if (element.indexOf(">") !=  -1) {
  66. element = element.split(">")[0];
  67. };
  68. ele_key=element.split("=")[0].slice(5);
  69. ele_value=element.split("=")[1].slice(1,-1);
  70. if(ele_key.indexOf("-") ==  -1){
  71. dataset[ele_key] = ele_value;
  72. }else{
  73. ele_keys=ele_key.split("-");
  74. ele_key=ele_keys[0];
  75. for(i=1;i<ele_keys.length;i++){
  76. ele_key+=replaceReg(ele_keys[i]);
  77. }
  78. }
  79. };
  80. }
  81. return dataset;
  82. }
  83. }
  84. //正则表达式变换首字母大写
  85. function replaceReg(str){
  86. var reg = /\b(\w)|\s(\w)/g;
  87. str = str.toLowerCase();
  88. return str.replace(reg,function(m){return m.toUpperCase()})
  89. }
  90. </script>
  91. </body>
  92. </html>

【关键代码】

    1. //带兼容的函数
    2. function get_dataset(ele){
    3. if(ele.dataset)
    4. return ele.dataset;
    5. else{
    6. //一下是兼容代码
    7. var dataset = {};
    8. var ele_split = ele.outerHTML.split(" ");
    9. for(var i = 0,element; i < ele_split.length; i++)
    10. {
    11. element = ele_split[i];
    12. if (element.substring(0,4) == "data") {
    13. if (element.indexOf(">") !=  -1) {
    14. element = element.split(">")[0];
    15. };
    16. ele_key=element.split("=")[0].slice(5);
    17. ele_value=element.split("=")[1].slice(1,-1);
    18. if(ele_key.indexOf("-") ==  -1){
    19. dataset[ele_key] = ele_value;
    20. }else{
    21. ele_keys=ele_key.split("-");
    22. ele_key=ele_keys[0];
    23. for(i=1;i<ele_keys.length;i++){
    24. ele_key+=replaceReg(ele_keys[i]);
    25. }
    26. }
    27. };
    28. }
    29. return dataset;
    30. }
    31. }

最新文章

  1. XVI Open Cup named after E.V. Pankratiev. GP of SPB
  2. 微信小程序 不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html
  3. web之css伪类
  4. angularjs实现时钟效果
  5. linux下验证码无法显示:Could not initialize class sun.awt.X1 解决方案
  6. extjs中的下载并对文件重命名功能的实现
  7. 百度:在O(1)空间复杂度范围内对一个数组中前后连段有序数组进行归并排序
  8. 4 - SQL Server 2008 之 使用SQL语句删除表格
  9. 查看堵塞的SQL
  10. vs code(egret wing) php配置与调试
  11. IOS自适应库---- Masonry的使用
  12. python特性、属性以及私有化
  13. sessionStorage、localStorage、cookie
  14. php截取中文字符串,英文字符串,中英文字符串长度的方法
  15. Vue.js源码——事件机制
  16. arttemplate与webpack的应用
  17. Java中java.util.concurrent包下的4中线程池代码示例
  18. (关于数据传输安全)SSH协议
  19. sqlalchemy外键和relationship查询
  20. Model操作补充

热门文章

  1. UpdatePanel AsyncPostBackTrigger PostBackTrigger 区别
  2. CentOS 6.8内核版本升级(升级至3.10)(转)
  3. ifconfig命令(转)
  4. linux 安装apahce的configure: error: APR not found. Please read the documentation解决办法
  5. PHP加密解密字符串
  6. ios中常用数据类型相互转换
  7. OC中@property属性关键字的使用(assign/weak/strong/copy)
  8. Power-BI 仪表盘实现动态预警
  9. 在一个Label上设置多种颜色字体
  10. 算法-KMP串匹配