为什么要使用自定义数据属性?

很多时候,我们需要存储与不同DOM元素关联的信息。这些信息对于读者而言可能不是必不可少的,但是易于访问将使我们的开发人员的生活更加轻松。

例如,假设您在网页上有一个不同餐厅的列表。在HTML5之前,如果您想存储有关餐厅提供的食物类型或其与访客之间的距离的信息,则应使用HTML class属性。如果您还需要存储餐厅id以查看用户要访问哪个餐厅,该怎么办?

这是基于HTML类属性的方法的一些问题。

  • HTML类属性并不意味着存储这样的数据。其主要目的是允许开发人员将样式信息分配给一组元素。
  • 每增加一条信息,就需要我们向元素添加一个新类。这使得解析JavaScript中的数据以实际获得我们所需的内容变得更加困难。
  • 假设给定的类名称以数字开头。如果您决定以后根据类名称中的数据对元素进行样式设置,则必须转义数字或使用样式表中的属性选择器。

为了摆脱这些问题,HTML5引入了自定义数据属性。名称以开头的元素上的所有属性data-都是数据属性。您还可以使用这些数据属性来设置元素的样式。

接下来,让我们深入了解数据属性的基础知识,并学习如何在CSS和JavaScript中访问它们的值。

HTML语法

如前所述,数据属性的名称始终以开头data-。这是一个例子:

<span style="color:#000000"><code class="language-markup"><span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>li</span> <span style="color:#669900">data-type</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>veg<span style="color:#999999">"</span></span> <span style="color:#669900">data-distance</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>2miles<span style="color:#999999">"</span></span> <span style="color:#669900">data-identifier</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>10318<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>Salad King
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>li</span><span style="color:#999999">></span></span></code></span>

现在,您可以使用这些数据属性来为访客搜索餐厅并对其进行排序。例如,您现在可以向他们显示特定距离内的所有素食餐厅。

data-前缀之外,有效的自定义数据属性的名称只能包含字母,数字,连字符(-),点(。),冒号(:)或下划线(_)。它不能包含大写字母。

使用数据属性时,应牢记两件事。

首先,存储在这些属性中的数据应为string类型。可以进行字符串编码的任何内容也可以存储在数据属性中。所有类型转换都需要使用JavaScript进行。

其次,仅当没有其他适当的HTML元素或属性时才应使用数据属性。例如,不适合存储元素的classin data-class属性。

元素可以具有任意数量的数据属性以及所需的任何值。

新建一个前端学习qun438905713,在群里大多数都是零基础学习者,大家相互帮助,相互解答,并且还准备很多学习资料,欢迎零基础的小伙伴来一起交流。

数据属性和CSS

您可以在CSS中使用数据属性使用属性选择器来设置元素的样式。您还可以借助该attr()功能(以工具提示或其他方式)将存储在data属性中的信息显示给用户。

造型元素

回到我们的餐厅示例,您可以使用属性选择器为餐厅的背景提供不同的提示,以提示用户餐厅的类型或其与餐厅的距离。这是一个例子:

<span style="color:#000000"><code class="language-css"><span style="color:#669900">li[data-type='veg']</span> <span style="color:#999999">{</span><span style="color:#990055">background</span><span style="color:#999999">:</span> #8BC34A<span style="color:#999999">;</span>
<span style="color:#999999">}</span><span style="color:#669900">li[data-type='french']</span> <span style="color:#999999">{</span><span style="color:#990055">background</span><span style="color:#999999">:</span> #3F51B5<span style="color:#999999">;</span>
<span style="color:#999999">}</span></code></span>

创建工具提示

您可以使用工具提示向用户显示与元素相关的一些其他信息。

我建议您将这种方法用于快速原型,而不是用于生产网站,这尤其重要,因为不能完全访问纯CSS工具提示。

您要显示的信息可以存储在data-tooltip属性中。

<span style="color:#000000"><code class="language-markup"><span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>span</span> <span style="color:#669900">data-tooltip</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>A simple explanation<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>Word<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>span</span><span style="color:#999999">></span></span></code></span>

然后,您可以使用::before伪元素将数据呈现给用户。

<span style="color:#000000"><code class="language-css"><span style="color:#669900">span::before</span> <span style="color:#999999">{</span><span style="color:#990055">content</span><span style="color:#999999">:</span> <span style="color:#dd4a68">attr</span><span style="color:#999999">(</span>data-tooltip<span style="color:#999999">)</span><span style="color:#999999">;</span>// More Style Rules
<span style="color:#999999">}</span><span style="color:#669900">span:hover::before</span> <span style="color:#999999">{</span><span style="color:#990055">display</span><span style="color:#999999">:</span> inline-block<span style="color:#999999">;</span>
<span style="color:#999999">}</span></code></span>

使用JavaScript访问数据属性

有3种方法可以访问JavaScript中的数据属性。

使用getAttribute和setAttribute

您可以在JavaScript中使用getAttribute()setAttribute()获取并设置不同数据属性的值。

如果给定属性不存在,则该getAttribute方法将返回null或为空字符串。这是使用这些方法的示例:

<span style="color:#000000"><code class="language-javascript"><span style="color:#0077aa">var</span> restaurant <span style="color:#a67f59">=</span> <span style="color:#ee9900">document</span><span style="color:#999999">.</span><span style="color:#dd4a68">getElementById</span><span style="color:#999999">(</span><span style="color:#669900">"restaurantId"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#0077aa">var</span> ratings <span style="color:#a67f59">=</span> restaurant<span style="color:#999999">.</span><span style="color:#dd4a68">getAttribute</span><span style="color:#999999">(</span><span style="color:#669900">"data-ratings"</span><span style="color:#999999">)</span><span style="color:#999999">;</span></code></span>

您可以使用该setAttribute方法来修改现有属性的值或添加新属性。

Report Advertisement

<span style="color:#000000"><code class="language-javascript">restaurant<span style="color:#999999">.</span><span style="color:#dd4a68">setAttribute</span><span style="color:#999999">(</span><span style="color:#669900">"data-owner-name"</span><span style="color:#999999">,</span> <span style="color:#669900">"someName"</span><span style="color:#999999">)</span><span style="color:#999999">;</span></code></span>

使用数据集属性

属性的帮助是访问数据属性的一种更简单的方法dataset。此属性返回一个DOMStringMap对象,其中每个自定义数据属性都有一个条目。

使用该dataset属性时,应牢记一些注意事项。

通过三个步骤将自定义数据属性转换为DOMStringMap键:

  • data-前缀从属性名称中删除
  • 名称中删除所有后跟小写字母的连字符,并将其后的字母转换为大写
  • 其他字符将保持不变。这意味着任何不带小写字母的连字符也将保持不变。

然后可以使用存储在对象中的camelCase名称作为键(如)来访问属性element.dataset.keyname

访问属性的另一种方法是使用括号表示法,例如 element.dataset[keyname]

考虑以下HTML:

<span style="color:#000000"><code class="language-markup"><span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>li</span> <span style="color:#669900">data-type</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>veg<span style="color:#999999">"</span></span> <span style="color:#669900">data-distance</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>2miles<span style="color:#999999">"</span></span> <span style="color:#669900">data-identifier</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>10318<span style="color:#999999">"</span></span> <span style="color:#669900">data-owner-name</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>someName<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>Salad King
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>li</span><span style="color:#999999">></span></span></code></span>

这里有一些例子:

<span style="color:#000000"><code class="language-javascript"><span style="color:#0077aa">var</span> restaurant <span style="color:#a67f59">=</span> <span style="color:#ee9900">document</span><span style="color:#999999">.</span><span style="color:#dd4a68">getElementById</span><span style="color:#999999">(</span><span style="color:#669900">"restaurantId"</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#0077aa">var</span> ratings <span style="color:#a67f59">=</span> restaurant<span style="color:#999999">.</span>dataset<span style="color:#999999">.</span>ratings<span style="color:#999999">;</span>
restaurant<span style="color:#999999">.</span>dataset<span style="color:#999999">.</span>ratings <span style="color:#a67f59">=</span> newRating<span style="color:#999999">;</span><span style="color:#0077aa">var</span> owner <span style="color:#a67f59">=</span> restaurant<span style="color:#999999">.</span>dataset<span style="color:#999999">[</span><span style="color:#669900">'ownerName'</span><span style="color:#999999">]</span><span style="color:#999999">;</span>
restaurant<span style="color:#999999">.</span>dataset<span style="color:#999999">[</span><span style="color:#669900">'ownerName'</span><span style="color:#999999">]</span> <span style="color:#a67f59">=</span> <span style="color:#669900">'newOwner'</span><span style="color:#999999">;</span></code></span>

现在,所有主流浏览器都支持此方法并且您应该比以前的方法更喜欢它来访问自定义数据属性。新建一个前端学习qun438905713,在群里大多数都是零基础学习者,大家相互帮助,相互解答,并且还准备很多学习资料,欢迎零基础的小伙伴来一起交流。

使用jQuery

您还可以使用jQuery data()方法访问元素的数据属性。在jQuery 1.6版之前,您必须使用以下代码访问数据属性:

<span style="color:#000000"><code class="language-javascript"><span style="color:#0077aa">var</span> restaurant <span style="color:#a67f59">=</span> <span style="color:#dd4a68">$</span><span style="color:#999999">(</span><span style="color:#669900">"#restaurantId"</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#0077aa">var</span> owner <span style="color:#a67f59">=</span> restaurant<span style="color:#999999">.</span><span style="color:#dd4a68">data</span><span style="color:#999999">(</span><span style="color:#669900">"owner-name"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
restaurant<span style="color:#999999">.</span><span style="color:#dd4a68">data</span><span style="color:#999999">(</span><span style="color:#669900">"owner-name"</span><span style="color:#999999">,</span> <span style="color:#669900">"newName"</span><span style="color:#999999">)</span><span style="color:#999999">;</span></code></span>

从1.6版开始,jQuery开始使用camelCase版本的数据属性。现在,您可以使用以下代码执行相同的操作:

<span style="color:#000000"><code class="language-javascript"><span style="color:#0077aa">var</span> restaurant <span style="color:#a67f59">=</span> <span style="color:#dd4a68">$</span><span style="color:#999999">(</span><span style="color:#669900">"#restaurantId"</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#0077aa">var</span> owner <span style="color:#a67f59">=</span> restaurant<span style="color:#999999">.</span><span style="color:#dd4a68">data</span><span style="color:#999999">(</span><span style="color:#669900">"ownerName"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
restaurant<span style="color:#999999">.</span><span style="color:#dd4a68">data</span><span style="color:#999999">(</span><span style="color:#669900">"ownerName"</span><span style="color:#999999">,</span> <span style="color:#669900">"newName"</span><span style="color:#999999">)</span><span style="color:#999999">;</span></code></span>

您应该知道jQuery还会尝试将从data属性获得的字符串内部转换为合适的类型,例如数字,布尔值,对象,数组和null。

<span style="color:#000000"><code class="language-javascript"><span style="color:#0077aa">var</span> restaurant <span style="color:#a67f59">=</span> <span style="color:#dd4a68">$</span><span style="color:#999999">(</span><span style="color:#669900">"#restaurantId"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#0077aa">var</span> identifier <span style="color:#a67f59">=</span> restaurant<span style="color:#999999">.</span><span style="color:#dd4a68">data</span><span style="color:#999999">(</span><span style="color:#669900">"identifier"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>console<span style="color:#999999">.</span><span style="color:#dd4a68">log</span><span style="color:#999999">(</span><span style="color:#0077aa">typeof</span> identifier<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#708090">// number</span></code></span>

如果希望jQuery以字符串形式获取属性值而不尝试将其转换为其他类型,则应使用jQuery的attr()method。

jQuery仅在首次访问数据属性时才检索它们的值。这样就不再访问或更改数据属性。您对这些属性所做的所有更改都是在内部进行的,并且只能在jQuery中访问。

假设您正在操纵以下列表项的数据属性:

<span style="color:#000000"><code class="language-markup"><span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>li</span> <span style="color:#669900">id</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>salad<span style="color:#999999">"</span></span> <span style="color:#669900">data-type</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>veg<span style="color:#999999">"</span></span> <span style="color:#669900">data-distance</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>2miles<span style="color:#999999">"</span></span> <span style="color:#669900">data-identifier</span><span style="color:#0077aa"><span style="color:#999999">=</span><span style="color:#999999">"</span>10318<span style="color:#999999">"</span></span><span style="color:#999999">></span></span>Salad King
<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"></</span>li</span><span style="color:#999999">></span></span></code></span>

您可以使用下面的代码更改其data-distance属性的值:

<span style="color:#000000"><code class="language-javascript"><span style="color:#0077aa">var</span> distance <span style="color:#a67f59">=</span> <span style="color:#dd4a68">$</span><span style="color:#999999">(</span><span style="color:#669900">"#salad"</span><span style="color:#999999">)</span><span style="color:#999999">.</span><span style="color:#dd4a68">data</span><span style="color:#999999">(</span><span style="color:#669900">"distance"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
console<span style="color:#999999">.</span><span style="color:#dd4a68">log</span><span style="color:#999999">(</span>distance<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#708090">// "2miles"</span><span style="color:#dd4a68">$</span><span style="color:#999999">(</span><span style="color:#669900">"#salad"</span><span style="color:#999999">)</span><span style="color:#999999">.</span><span style="color:#dd4a68">data</span><span style="color:#999999">(</span><span style="color:#669900">"distance"</span><span style="color:#999999">,</span><span style="color:#669900">"1.5miles"</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
console<span style="color:#999999">.</span><span style="color:#dd4a68">log</span><span style="color:#999999">(</span>distance<span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#708090">// "1.5miles"</span><span style="color:#ee9900">document</span><span style="color:#999999">.</span><span style="color:#dd4a68">getElementById</span><span style="color:#999999">(</span><span style="color:#669900">"salad"</span><span style="color:#999999">)</span><span style="color:#999999">.</span>dataset<span style="color:#999999">.</span>distance<span style="color:#999999">;</span>
<span style="color:#708090">// "2miles"</span></code></span>

如您所见,data-distance使用普通JavaScript(而不是jQuery)访问属性的值将始终为我们提供旧的结果。

结论

在本教程中,我介绍了您需要了解的有关HTML5数据属性的所有重要内容。除了使用属性选择器创建工具提示和样式元素外,您还可以使用数据属性来存储和向用户显示一些其他数据,例如有关未读消息的通知等。

如何使用HTML5自定义数据属性以及原因相关推荐

  1. 如何使用 HTML5 自定义数据属性

    如何使用 HTML5 自定义数据属性 在本文中,我将向你介绍如何使用HTML5自定义数据属性.我还将向你介绍一些开发人员在工作中经常使用的优秀实例. 为什么需要自定义数据属性? 很多时候我们需要存储一 ...

  2. html5游戏怎么修改数值,如何使用HTML5自定义数据属性

    在本文中,我将向你介绍如何使用HTML5自定义数据属性.我还将向你介绍一些开发人员在工作中经常使用的优秀实例. 为什么需要自定义数据属性? 很多时候我们需要存储一些与不同DOM元素相关联的信息.这些信 ...

  3. HTML5自定义数据属性data-*

    '人'在江湖,'身'不由己 HTML元素属性可以分为两种类:基本属性 和 自定义数据属性 基本属性: id.class等基本属性的主要作用是用来给一组元素添加样式信息的 或者 用来获取指定元素的. & ...

  4. 使用HTML5的自定义数据属性的jQuery选择器

    本文翻译自:jQuery selectors on custom data attributes using HTML5 I would like to know what selectors are ...

  5. 探索在原生网页中使用自定义数据属性

    先说说我为什么有这种"奇怪"的想法. 它基于这样一个场景:我最近闲来无事完善了一个小demo:音乐播放器.在里面有一个功能 -- 点击列表某一项弹出音乐播放弹框.我原先一直是&qu ...

  6. 使用HTML5的十大原因

    使用HTML5的十大原因 你难道还没有考虑使用HTML5? 当然我猜想你可能有自己的原因:它现在还没有被广泛的支持,在IE中不好使,或者你就是喜欢写比较严格的XHTML代码.HTML5是web开发世界 ...

  7. Web开发技巧:使用自定义数据属性创建弹出窗口

    2019独角兽企业重金招聘Python工程师标准>>> 在开发web应用时,有时会用JavaScript获取文档之外的信息,某些情况下,我们需要用一些技巧来处理这些额外信息以保证We ...

  8. html5 mp3播放器源码,HTML5自定义mp3播放器源码

    audio对象 src兼容.ogg .wav .mp3 width autoplay loop muted静音 播放play() var myAudio = new Audio(); myAudio. ...

  9. HTML5 自定义视频播放器

    HTML5 自定义视频播放器 第一步:获取播放器 第二步:实现播放与暂停 第三步:实现全屏操作 第四步:实现播放的逻辑 第五步:实现播放过程的逻辑 第六步:实现视频的跳播 第七步:播放完毕后重置播放器 ...

最新文章

  1. OpenCV演示代码以查找图像中的轮廓(附完整代码)
  2. Python手册 3.7
  3. 分析遇到非正态数据该怎么办?
  4. Linux namespace之:uts namespace
  5. TensorFlow 第二步 小试牛刀:一个神经元
  6. mysql统计姓名为小明_Mysql 统计查询相同字段只统计一条
  7. jsp网页实现自动刷新和自动跳转页面
  8. c语言学习-对一个百分制的成绩给出相应的等级(如90分以上A,80分以上B等
  9. pytorch FC_classification
  10. java的反射机制的好处
  11. 每天一个linux命令(47):iostat命令
  12. python xml 解析_python解析xml文件方式(解析、更新、写入)
  13. UCI数据集(论文常用数据集)
  14. NorthWind 数据库整体关系
  15. linux格式化后恢复 vmdk恢复,根据flat.vmdk文件恢复磁盘(完善版)
  16. DFD图练习(图书管理系统)
  17. MySQL数据库查询语句汇总
  18. Mac 安装第三方软件遇到的问题解决方案汇总
  19. 【滴水逆向笔记】C语言指针
  20. 骨干网络演化释义以及TCP BBR的部署环境问题

热门文章

  1. Python实现整蛊恶搞程序生成exe文件小弹窗祝福发给好兄弟好闺蜜好室友
  2. 这些不想买的家电 这样打动了你
  3. NSN sprint904 总结回顾
  4. 网页版天气预报linux,在Linux 命令行下浏览天气预报
  5. 辐射度算法(radiosity)原理
  6. Direct2D 简介
  7. 怎样降低微信h5棋牌游戏类app域名被微信拦截封杀屏蔽的几率
  8. 超好用Python小功能(持续更新中)
  9. LAN、WAN、WLAN、VLAN的区别
  10. 什么是VPS? 它是如何用于自动驾驶的?