HTML 5之前,我们必须依赖于class和rel属性来存储需要在网站中使用的数据片段,这种做法有时会在网站的外观和实用性之间产生冲突。而HTML 5 Data属性的存在就能很好满足需要。

HTML5标准允许你在普通的元素标签里,嵌入类似data-*的属性,来实现一些简单数据的存取。它的数量不受限制,并且也能由javascript动态修改,也支持CSS选择器进行样式设置,jquery也提供了支持的支持。这使得data属性特别灵活,也非常强大。有了这样的属性我们能够更加有序直观的进行数据预设或存储。

下面举个例子,这是一个span元素,它的内容是一首音乐的名称,我们为其HTML标签里直接预置这首歌的更多信息,在HTML源码上看起来可以这样来写:

<span id="music-latch" class="musique"data-date="2013"data-genre="Electronic" data-album="Settle (Deluxe)" data-artist="Disclosure" data-composer="Howard Lawrence & Guy Lawrence"> Latch (feat. Sam Smith) </span> 

这样,我们就很简单的为这首歌在span标签里直接内嵌了其专辑、艺术家和流派信息。

利用 getAttribute、setAttribute 存取 dataset

作为HTML元素的标签,dataset的存取也服从getAttribute、setAttribute,而且这两个方法兼容性也最广。

例如对于上面的两个例子,我们可以运行:

//getvar album = document.getElementById("music-latch").getAttribute("data-album"); console.log(album); //set document.getElementById("food-pkd").setAttribute("data-en","Beijing Stuffed Duck"); 

这样就可以以一种更兼容的方式,来存取dataset数据。所做出的任何更改,都是可以实时反映到元素data属性上的。

但是这种方法比较低端,如果遇到多个data-*自定义字段,想要一次全部获取所有的data属性并包装成对象的话,还必须做一个循环,很麻烦。不过我们还有Dataset API可用。

利用 dataset API 存取 dataset

dataset属性的值是DOMStringMap的一个实例,名值对的映射。每个data-name形式的属性都有一个对应的属性,只不过该属性名没有data-前缀。

通过.dataset API,我们可以更方便的获取元素的所有data字段,并以对象的方式,方便存取和遍历。例如,对于上面的例子,可以运行:

//getvar songd = document.getElementById("music-latch").dataset; var album = songd.album; console.log(album); //set document.getElementById("food-pkd").dataset.en = "Beijing Stuffed Duck"; //add document.getElementById("food-pkd").dataset.es = "Pato laqueado a la pekinesa"; 

这时候我们在访问data时,就不需要data-.dataset.name就可以访问到。这比上面的方法更方便。所做出的任何更改,都是可以实时反映到元素data属性上的。

如果涉及到连字符-,可以采取驼峰化的方法来存取:

<span id="en" data-en-us="Peiking Duck"></span> 

其中en-us要写成enUs:

var en = document.getElementById("en").dataset.enUs;

利用 jQuery.attr 方法存取 dataset

jQuery有着出色的兼容性。类似get、setAttribute,jQuery的.attr()方法同样可以用在这样的情况下,例如,对于上面的例子,可以运行:

window.jQuery && (function($){ //get var album = $("#music-latch").attr("data-album"); console.log(album); //set $("#food-pkd").attr("data-en","Beijing Stuffed Duck"); })(window.jQuery); 

这与jQuery.attr运用在其他属性上时的情况完全一样,并且所做出的任何更改,都是可以实时反映到元素data属性上的。

利用 jQuery.data 方法存取 dataset

jQuery从1.4.2版本开始支持$.data()方法来直接访问data属性,同时也不需要写data-关键词了,例如,对于上面的例子,可以运行:

window.jQuery && (function($){ //get var album = $("#music-latch").data("album"); console.log(album); //set $("#food-pkd").data("en","Beijing Stuffed Duck"); })(window.jQuery); 

这样的方法也能出色的存取data属性,但是需要注意,jQuery.data对data数据做出的更改,不会反映到HTML元素data属性上。

也就是说,jQuery现在认为#food-pkd元素的data-en为"Beijing Stuffed Duck",但是在HTML元素上,其值还是没有改变,仍为"Peking Duck":

window.jQuery && (function($){ //set $("#food-pkd").data("en","Beijing Stuffed Duck"); console.log( $("#food-pkd").data("en") ); // log: "Beijing Stuffed Duck" })(window.jQuery); console.log( document.getElementById("food-pkd").dataset.en ); // log: "Peking Duck" 

jQuery.data 解析 Dataset 的 JSON 信息

事实上,jQuery还可以很聪明的从data里提取出json信息转换为对象:

<span id="song-jsn"data-meta='{"name":"Latch", "album":"Disclosure", "date":"2013"}'>Latch (feat. Sam Smith)</span>
window.jQuery && (function($){var jsn = $("#song-jsn").data("meta"); console.log( jsn.album ); // log: "Disclosure" })(window.jQuery); 

这样,你就可以不必写一堆 data-album、data-lyrics、data-artist了,你可以直接把所有歌曲信息全部写到JSON里放到一个单独的data标签里!

CSS、jQuery 查找 data 属性对应元素

如果我想要所有专辑名(data-album)为Disclosure的歌曲名显示为红色,在CSS选择器里,我们可以这样去匹配:

.musique[data-album='Disclosure']{color:red; } 

这样,上面的例子中的span文字就会显示为红色。

如果我想要所有的现在可订购的食物在点击后弹出对话窗,在jQuery里,也可以通过中括号[]用以下方式去轻松匹配:

window.jQuery && (function($){ $(".food").filter("[data-available]").each(function(){ $(this).click(function(){ alert("It's Available!"); }); }); })(window.jQuery); 

怎么样,是不是感觉这种自由简便的存储方式可以带来很强大的效果。

怎么使用Data属性

自定义的Data属性的名字必须以data-开头,并且连字号后面至少要有一个符合HTML规范的字符。(HTML naming convention.)

W3C文档对Data属性的说明如下:

 Custom data attributes are intended to store custom data private to the page or application, for which there are no more appropriate attributes or elements.

这也意味着我们只能在应用程序内部使用data数据,而不应该将它呈现给用户。更重要的是你可以给元素自定义任何数量的Data属性,并赋予任何有意义的值。

什么时候需要使用Data属性?

通过上面的讲述,已经知道怎么使用Data属性了。但为了更好地了解这个属性,再看几个例子。

在Tuts+的Webdesign板块已经有了很好地、关于使用data属性的例子。One of the tuts,将Data属性运用到样式中,让菜单有一个“气泡”通知效果。在这个示例中,data属性被用于只想气泡通知的值。

<a href="#" class="pink" data-bubble="2">Profile</a>

另外一个示例:quick tip,Data属性作为提示信息是怎么被用于提示框的

<a href="#" class="tooltip" data-tip="this is the tip!">This is the link</a> 

什么时候不该用Data属性?

当元素已经建立或者更适当的属性时,就不应该用Data属性了。在下面这个示例中运用data是不合适的:

<span data-time="20:00">8pm<span> 

因为在一个表示时间的元素中,已经有一个datetime属性了:

<time datetime="20:00">8pm</time> 

同时,Data属性不应该被用作一个可替代的元数据或者微格式。微格式主要是为人类设计的、用于介绍上下文信息的。比如,如果你有一张关于个人或者某个组织联系信息的Vcard,你应该赋予一个名为vcard的class属性,让机器明白它包含了一些联系的信息。

利用微格式的代码如下:

<div class="vcard"><span class="fn " >Aaron Lumsden</span>
</div>

相反,利用Data属性的代码如下:

<div class="vcard"><span data-name="Aaron Lumsden " >Aaron Lumsden</span> </div> 

了解更多关于微格式的信息:Mircorformats.org.

在CSS中使用Data属性

既然在HTML标记中实现了Data属性,那么也可以在CSS中使用这个属性了。注意:尽管在某些情况下更适合直接使用Data属性,那也不应该对任何样式规则直接使用该属性。简单的使用如下:

[data-role="page"] {/* Styles */
} 

 html 5 dataset兼容性

转载于:https://www.cnblogs.com/zhjh256/p/5936101.html

html 5实用特性之data属性相关推荐

  1. java socket中属性详解_前端开发:关于Vue组件中的data属性值是函数而不是对象的详解...

    最近在搞关于前端开发的基础知识归纳,发现了不少经典知识点,那么本篇博文就来分享一个经典的知识点:Vue组件中的data属性值为什么是函数而不是对象.首先来了解一下Vue组件的使用理念:在Vue组件使用 ...

  2. vue--为什么data属性必须是一个函数

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 前言 老规矩,我们还是先说为什么. 问题描述:为什么在vue组件中,我们的data属性必须是一个函数,new Vue()中的da ...

  3. vue 给标签添加data属性_vue之data属性

    培训代码 在new Vue()的时候,是可以给data直接赋值为一个对象的. 但是在组件中,data必须是一个函数,注册组件其实并不产生新的组件类,但会产生一个可以用来实例化的新方式. 因为可能在多处 ...

  4. 使用Action,Data属性启动系统Activity

    几个Action属性和Data属性的特殊组合: ACTION_VIEW content://com.android.contacts/contacts/1:显示标识为1的联系人的信息 ACTION_E ...

  5. HTML data属性简介以及低版本浏览器兼容算法

    实例 使用 data-* 属性来嵌入自定义数据: <ul> <li data-animal-type="bird">Owl</li> <l ...

  6. Redis高级实用特性:发布及订阅消息

    在之前的文章中,介绍过Redis数据库高级实用特性中的持久化机制,今天为大家介绍Redis的另一高级实用特性--发布及订阅消息. 发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布 ...

  7. jquery html data属性,jQuery Mobile Data 属性

    jQuery Mobile Data 属性 jQuery Data 属性 jQuery Mobile 使用 HTML5 data-* 属性来为移动设备创建更具触摸友好性和吸引性的外观. 在下面的参考列 ...

  8. html元素data属性设置变量,HTML5 自定义属性 data-* 和 jQuery.data 详解

    编辑注:HTML中使用data-xx="xx"开头标记的属性到底有什么用,直接使用xx="xx"不是更简单吗?其实data-xx是HTML5的一个属性,支持通过 ...

  9. Redis学习第八课:Redis高级实用特性(一)

    Redis高级实用特性 注:我学习的环境是vmware7.1 + ubantu10.10+ redis 3.0.2 1.安全性 设置客户端连接后进行任何其他指定前需要的密码.因为redis速度相当快, ...

最新文章

  1. CAS操作与无锁队列
  2. html中 alt 和 title 的区别
  3. c语言单链表冒泡排序的步骤,急!!求c语言单链表冒泡排序的详细流程图
  4. MySQL索引的分类、何时使用、何时不使用、何时失效?
  5. 网易云音乐的算法有什么特点_当算法设计音乐厅时会发生什么?
  6. mac安装win10_mac制作win10启动盘教程
  7. 【洛谷 2661】信息传递
  8. 2G的完整形式是什么?
  9. SQLyog 报错2058 :连接 mysql 8.0.12 解决方法
  10. .Net下二进制形式的文件(图片)的存储与读取(转载)
  11. mysql数据库修复工具 innodb表数据恢复 ibd文件恢复工具
  12. EPLAN史上最全部件库,部件宏,EDZ格式,大小合适导入容易 部件包含图片宏
  13. CSP-J/S2020游记
  14. SEO优化外包 避坑指南
  15. 电池SOC预估存在哪些难题以及常用方法
  16. 初探MySQL的语句之二
  17. java上传文件怎么设置成777权限_如何修改文件夹777权限
  18. 计网实验总结一:路由器配置
  19. 微信小程序学习第8天——自定义组件的数据监听器Observer小案例
  20. python学习2——if语句、elif、if嵌套、while循环、while嵌套

热门文章

  1. 数据存储-CoreData总结
  2. 数组02 - 零基础入门学习C语言24
  3. mac php5.6 gd 扩展,mac 编译安装php5.6.40
  4. 昨天面试了两个小姑娘,都是项目助理职位
  5. 上市公司回购股票是利好还是利空?
  6. 到现在还说房价不可能跌的都是些什么样的人?
  7. DLog-M有什么用
  8. 各位网友为什么当初投资P2P的人最后基本都是血本无归?
  9. 乡镇上那些卖散白酒的一天不见几个人买,为什么不关店?
  10. 家里安装宽带,另一个房子相距150米怎么连网?