新的HTML5标准允许你在普通的元素标签里,嵌入类似data-*的属性,来实现一些简单数据的存取。它的数量不受限制,并且也能由javascript动态修改,也支持CSS选择器进行样式设置。这使得data属性特别灵活,也非常强大。有了这样的属性我们能够更加有序直观的进行数据预设或存储。下面介绍HTML5 Dataset 存储的实际应用,以及包括jQuery在内的四种存取方式。
HTML5 Dataset 存储的例子
为一个元素分配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标签里直接内嵌了其专辑、艺术家和流派信息。
再举一个例子,比如说一个本地化翻译的嵌入:
<h2 id="food-pkd" class="food" data-en="Peking Duck" data-available data-ja="北京ダック" data-fr="Canard laqué de Pékin" data-de="Pekingente"> 北京烤鸭 </h2>
这样一来,在不改变网页外观的情况下,我们可以在设定机器翻译的同时检测data-XX,来人工提供更准确精准的翻译。
其中data-available没有值,允许空值,例如在这个情况下,它仅代表该食物可以订购,所以不需要有值。
利用 getAttribute、setAttribute 存取 dataset
作为HTML元素的标签,dataset的存取也服从getAttribute、setAttribute,而且这两个方法兼容性也最广。
例如对于上面的两个例子,我们可以运行
//get var 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 API,我们可以更方便的获取元素的所有data字段,并以对象的方式,方便存取和遍历。例如,对于上面的例子,可以运行
//get var 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; }
window.jQuery && (function($){ $(".food").filter("[data-available]").each(function(){ $(this).click(function(){ alert("It's Available!"); }); }); })(window.jQuery);
相关推荐
HTML5的`data-*`属性,特别是`data-role`,是jQuery Mobile框架中用来初始化和配置小部件的关键特性。这些自定义属性允许开发者通过标记直接设置组件的行为和配置,为移动应用开发提供了便利。虽然使用`data-*`属性...
H5为我们提供了以 data- 为前缀定义需要的属性即可设置自定义属性 <div id=box1 data-name=Musk> <div id=box2 data-full-name=Elon> 获取 使用H5自定义属性对象dataset来获取 let box1 = document.getElementById...
HTML5如何添加自定义标签属性(data-自定义属性).zip
本篇文章将详细介绍如何使用JavaScript获取HTML5的data属性。 首先,我们需要了解data-*属性的工作原理。在HTML元素中,我们可以定义任何数量的data-*属性,其中“*”可以替换为任意合法的属性名称。例如: ```...
在jQuery的attr与prop提到过在IE9之前版本中如果使用property不当会造成内存泄露问题,而且关于Attribute和Property的区别也让人十分头痛,在HTML5中添加了data-*的方式来自定义属性,所谓data-*实际上上就是data-...
HTML5的data属性是一个强大的工具,它允许开发者在HTML元素中存储自定义的数据,这些数据对用户来说通常是不可见的,但可以在JavaScript中被轻松访问和处理,从而增强网页的交互性和功能。这个属性遵循一个特定的...
将图片作为元素添加到.slider-container中,并利用HTML5 data属性存储图片相关信息,例如索引和链接: ```html <div class="slide" data-index="0" data-url="img1.jpg"> <div class="slide" data-index="1" data-...
接着,我们要讨论HTML5的data属性。data属性允许我们在HTML元素上自定义数据,这些数据对用户是不可见的,但可以通过JavaScript或CSS进行访问。例如,我们可以为每个图片元素添加一个"data-title"属性,存储对应的...
本文实例讲述了JS实现获取自定义属性data值的方法。分享给大家供大家参考,具体如下: HTML部分: <div id=tree data-leaves=47 data-plant-height=2.4m> js部分: var tree = document.getElementById(tree); //...
本文主要关注jQuery Mobile中的一个关键特性——data属性,这些属性用于定制和增强UI元素的功能和外观,使其更适合打印和学习。 首先,我们来看`data-role="button"`属性,它用于将HTML元素转化为jQuery Mobile的...
并能通过js代码或html5 data属性来串联各种CSS3动画效果。简单实用,欢迎下载!本代码适用浏览器:搜狗、360、FireFox(建议)、Chrome、Safari、Opera、傲游、世界之窗,不支持IE8及以下浏览器,首选火狐浏览器。是一...
jQuery Mobile 使用 HTML5 data-* 属性来为移动设备创建更具触摸友好性和吸引性的外观。 在下面的参考列表中,粗体显示的值为默认值。 按钮 在1.4 版本以后已废弃。使用 CSS 类 替代。带有 data-role=”button” 的...
HTML5的data-*属性是为了解决网页或应用程序中存储私有自定义数据的需求而引入的新特性。这个属性允许开发者在HTML元素上嵌入自定义的数据,而不影响标准的语义。data-*属性的命名规则非常简单:以"data-"开头,后面...
在HTML5中,自定义属性通常以"data-"为前缀,例如"data-custom-attr"。这样的属性不会被浏览器解析,但可以在JavaScript中通过DOM API访问。`ExtTag`的功能可能是将这些"data-"属性转换为JavaScript对象,使得我们...
HTML5中的自定义`data-*`属性是为了解决在HTML元素上存储额外数据的需求而引入的。这些属性允许开发者在不破坏HTML结构和语义的前提下,附加自定义的、非标准的数据。通常,这些数据在页面呈现时并不会直接显示,但...
在JavaScript原生API中,可以使用`dataset`属性来访问data属性,如`elem.dataset.chb`。在给出的例子中,这段代码会在页面加载时遍历所有的div元素,查找具有"data-chb"属性的元素,并为其添加一个"class"为"ui_...
它通过简单的API调用和HTML5 data属性就能快速配置。例如,你可以通过`data-date-format`来设置日期格式,通过`data-date-start-date`和`data-date-end-date`来限制可选日期范围。 2. **Pickadate.js** Pickadate....
在标题"JS组件系列之使用HTML标签的data属性初始化JS组件"中,提到的关键知识点是: 1. **HTML的`data-*`属性**:这是一种HTML5引入的新特性,允许开发者在元素上存储自定义的数据,其名称由"data-"前缀和任意字符...
3. **HTML5 data属性**: HTML5的`data-*`属性可以用来存储自定义数据,比如可以将图片URL存储在`data-image`属性中。然后在JavaScript中解析这些数据,动态创建包含图片的DOM元素。 4. **jQuery实现**: 描述中...
你可以去读一下HTML5的详细规范,但这个自定义data属性的用法非常的简单,就是你可以往HTML标签上添加任意以 data-开头的属性,这些属性页面上是不显示的,它不会影响到你的页面布局和风格,但它却是可读可写的。...