介绍了两种 自定义属性 的方式
一:完全自定义
二:data-* 内置的自定义方式
1.自定义属性名
<body>
<button desc="this is a button">Click me!</button>
<script>
var btn = document.querySelector('button')
console.log(btn.getAttribute('desc')) // 获取属性值
btn.setAttribute('tip', 'please click button') // 设置属性值
</script>
</body>
–
2.data-*自定义属性名
!important 是 data, 不是date!! (错了好几遍了!!!!)
设置 data-* 自定义属性
使用 data-* 属性来嵌入自定义数据:
- 实例–直接写在元素身上
//实例 one
<ul>
<li data-animal-type="鸟类">喜鹊</li>
<li data-animal-type="鱼类">金枪鱼</li>
<li data-animal-type="蜘蛛">蝇虎</li>
</ul>
//实例--- 通过data内置Api设置
- `el.dataset.name='value'`
eg
<body>
<button data-desc="this is a button" id="btn1">Click me!</button>
<!-- 注意 data-* 自定义属性 变量 使用双驼峰命名 data-descTwo (不建议使用!!!) -->
<!-- ⭐ 获取时就要注意一点区别,所有双驼峰的大写都会改为小写! -->
<button data-descTwo="this is a button" id="btn2">Click me2!</button>
<script>
var btn1 = document.querySelector('#btn1')
var btn2 = document.querySelector('#btn2')
//
console.log(btn1.dataset.desc) // ⭐⭐⭐⭐⭐获取自定义属性值
// ⭐⭐⭐⭐⭐获取自定义属性值(双驼峰自定义变量)
// 双驼峰变量的值 所有双驼峰的变量中的大写都会改为小写!!!!
console.log(btn2.dataset.desctwo)
console.log(btn1.dataset.tip)
btn1.dataset.tip = 'please click button' // 设置属性值
console.log(btn1.dataset.tip)
</script>
</body>
获取 data-* 自定义属性
-
方法一: el.dataset (查看所有的 该元素的 data-* 的自定义属性值)
-
eg
console.log(el.dataset)
-
方法二: el.dataset.自定义属性名 (查看 该元素的 data-自定义属性名 的值)
- 注意: 使用双驼峰命名(不建议-双驼峰命名)
- 若果使用了,注意使用dataset获取时
所有双驼峰的变量中的大写都会改为小写!!!!
-
eg
<button data-desc="this is a button" id="btn1">Click me!</button>
<!-- 注意 data-* 自定义属性 变量 使用双驼峰命名 data-descTwo -->
<!-- ⭐ 获取时就要注意一点区别,所有双驼峰的大写都会改为小写! -->
<button data-descTwo="this is a button" id="btn2">Click me2!</button>
console.log(btn1.dataset.desc) // ⭐⭐⭐⭐⭐获取自定义属性值
// ⭐⭐⭐⭐⭐获取自定义属性值(双驼峰自定义变量)
// 双驼峰变量的值 所有双驼峰的变量中的大写都会改为小写!!!!
console.log(btn2.dataset.desctwo)
拓展
所有主流浏览器都支持 data-* 属性。
定义和用法
data-* 属性用于存储页面或应用程序的私有自定义数据。
data-* 属性赋予我们在所有 HTML 元素上嵌入自定义 data 属性的能力。
存储的(自定义)数据能够被页面的 JavaScript 中利用,以创建更好的用户体验(不进行 Ajax 调用或服务器端数据库查询)。
data-* 属性包括两部分:
- 属性名不应该包含任何大写字母,并且在前缀 "data-" 之后必须有至少一个字符
- 属性值可以是任意字符串
**注释:**用户代理会完全忽略前缀为 "data-" 的自定义属性。
这种方式需要在自定义属性名前面加上data-,获取/赋值都需要通过dataset,这种方式操作更为简单,*所有data-属性都存放在dataset中