第24天 说说你对属性data-的理解
平时用的比较多的是 把必要数据绑定到某标签上然后,js、jquery 点击事件或者交互事件的时候 获取dataset里的属性值,便于 业务处理。
学习中,自己用过的只有做图片懒加载的时候用data-属性存过src
data- 属性是H5新增的自定义属性,也可以用来存储值。我个人用的不多,这个data- 属性倒是和vue中的v-bind 功能相似, 自定义属性,绑定数据。也和上面说的一样可以通过js进行获取使用
我都是在class id name等全部被占用了才想起来去用data-属性~
data-*属性主要是用来储存自定义数据,所存储的属性值能够在后续js中操作调用。
data-* 属性,我个人理解就是用来暂存非用户输入的数据,并且能在js里面使用
这个不得不提一下标准出来之前的做法。html是支持自定义attribute的,当时为了给前端传数据,大家自己定义的attribute五花八门,不好跟标准区分,js取数据方式也跟标准attribute一样。人家一看这哪行啊,你们不能再这么搞了,听我说,你们都在自定义属性前加个data-前缀
关键字dataset
注意一点,data-attr attr不支持驼峰命名法,只能用小写命名,被坑过很多次
原本 HTML 也允许自定义 attributes 因此在早期前端,为了将数据塞在标签中,往往会采用自定义属性存放数据的方法。
而 data- 便是 HTML 5 中用来存放数据的标签。使用 data-* 时,需要注意,data- 之后的单词必须是小写的,但是可以用多个 - 连接。而在对应的 DOM 方法中,我们可以通过 ele.dataset[属性名] 进行访问。在这里的属性名可以使用驼峰(转换规则和 vue 的组件名称转换一样)。
相比之前的自定义属性存放数据,使用 data-* 的方法,在数据的获取上会比较方便。
参考文章:
使用数据属性
首先定义一下: data-是h5对自定义标签属性拓展的知识点,可以存储自定义属性,可以通过js获取到,一般会存储业务需要的数据,和vue中的bind很类似
是暂存非用户输入的数据
data-*是HTML5新增的元素属性,用于存储页面或应用程序的私有自定义数据。data-* 属性赋予我们在所有 HTML 元素上嵌入自定义 data 属性的能力。存储的(自定义)数据能够被页面的 JavaScript 中利用。
使用:
<div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>John Doe</div>
const el = document.querySelector('#user');
// el.id === 'user'
// el.dataset.id === '1234567890'
// el.dataset.user === 'johndoe'
// el.dataset.dateOfBirth === ''
// set the data attribute
el.dataset.dateOfBirth = '1960-10-03';
// Result: el.dataset.dateOfBirth === 1960-10-03
delete el.dataset.dateOfBirth;
// Result: el.dataset.dateOfBirth === undefined
// 'someDataAttr' in el.dataset === false
el.dataset.someDataAttr = 'mydata';
// Result: 'someDataAttr' in el.dataset === true
我认为主要是为了保存一些马上会用到的属性
比如懒加载时保存的url
data-属性是HTML5新增的一个属性,它允许在HTML元素中存储额外的信息。语法非常简单,在元素上定义属性,且以data-开头,这就是一个数据属性。
例如:
<article
id="electriccars"
data-columns="3"
data-index-number="12314"
data-parent="cars">
...
</article>
在<article>元素上,通过data-定义了三个属性,这三个属性保存了相应的数据。article元素将会携带着这些数据,在其他地方也可以进行获取使用。
JavaScript访问在外部可以通过js代码访问这些属性的值,方法有两种:
getAttribute()配合它们完整的HTML名称去读取它们。<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<article id="electriccars" data-column="3" data-index-number="1234" data-parent="cars">
语法非常简单。所有在元素上以data-开头的属性为数据属性。比如说你有一篇文章,而你又想要存储一些不需要显示在浏览器上的额外信息。请使用data属性:
</article>
</body>
<script>
var article = document.querySelector('#electriccars');
// 1. 通过getAttribut()方法获取属性值
console.log(article.getAttribute('data-columns'));
console.log(article.getAttribute('data-index-number'));
console.log(article.getAttribute('data-parent'));
</script>
</html>
dataset对象去获取到数据属性,需要获取属性名中data-之后的部分(如果以破折号连接的名称需要改写为驼峰命名,例如index-number转换为indexNumber)
具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<article id="electriccars" data-column="3" data-index-number="1234" data-parent="cars">
语法非常简单。所有在元素上以data-开头的属性为数据属性。比如说你有一篇文章,而你又想要存储一些不需要显示在浏览器上的额外信息。请使用data属性:
</article>
</body>
<script>
var article = document.querySelector('#electriccars');
// 2. 通过dataset对象获取属性值
console.log(article.dataset.column);
// 破折号命名需要改写为驼峰命名
console.log(article.dataset.indexNumber);
console.log(article.dataset.parent);
</script>
</html>
每一个属性都是可以读写的字符串,因此也是可以写入数据属性的。例如:
var article = document.querySelector('#electriccars');
article.dataset.column = 5; // 将column修改为5
console.log(article.dataset.columns); // 5
如下图所示:column属性的值已经变成了5。

CSS访问属性data设定为HTML属性,它们同样能被CSS访问。
attr()函数来显示data-parent的内容/* 双冒号表示伪元素 */
article::after {
/* 在article元素后添加内容,内容为通过attr()函数获取的data-parent属性的值 */
content: attr(data-parent);
color: red;
}
如下图所示:
通过attr()函数获取到data-parent属性的值,然后作为伪元素添加到article元素的后边。

article[data-column='3'] {
background-color: deepskyblue;
width: 50%;
}
如下图所示:
通过属性选择器,对article元素设置了背景颜色及宽度

使用:
<div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>John Doe</div>const el = document.querySelector('#user'); // el.id === 'user' // el.dataset.id === '1234567890' // el.dataset.user === 'johndoe' // el.dataset.dateOfBirth === '' // set the data attribute el.dataset.dateOfBirth = '1960-10-03'; // Result: el.dataset.dateOfBirth === 1960-10-03 delete el.dataset.dateOfBirth; // Result: el.dataset.dateOfBirth === undefined // 'someDataAttr' in el.dataset === false el.dataset.someDataAttr = 'mydata'; // Result: 'someDataAttr' in el.dataset === true
Most helpful comment
原本 HTML 也允许自定义
attributes因此在早期前端,为了将数据塞在标签中,往往会采用自定义属性存放数据的方法。而
data-便是 HTML 5 中用来存放数据的标签。使用data-*时,需要注意,data-之后的单词必须是小写的,但是可以用多个-连接。而在对应的 DOM 方法中,我们可以通过ele.dataset[属性名]进行访问。在这里的属性名可以使用驼峰(转换规则和 vue 的组件名称转换一样)。相比之前的自定义属性存放数据,使用
data-*的方法,在数据的获取上会比较方便。参考文章:
使用数据属性