![]()
上增加big和small属性来存储大图片和小图片,当点击某个按钮时可以通过JavaScript来控制切换大小图片。那么这些自定义的属性如何读写?文档DOM提供元素方法setAttribute和getAttribute来读取和修改属性值。这种方式在属性多的时候比较不方便,占用了比较多的代码行数。
在Chrome 8和Firefox 6以上为HTMLElement添加了一个只读属性dataset, 这个属性类型暴露了一个字符串映射DOMStringMap,它包含了以data-开头的自定义属性键值对, 比如以下的字定义属性data-url。 通过使用这个特性,可以使用很少的代码对自定义属性进行读写。
HTML里,以data-开头;允许字母,数字,破折号(-), 下划线,冒号,并且大写字母在JavaScript使用中会转换为小写;<div id="test" data-url="https://blog.csdn.net/infoworld"
data-user-name="infoworld"
data-download_1="https://download.csdn.net"
data-preview.wtl="https://edu.csdn.net/course/detail/26149"
data-preview:cpp="https://edu.csdn.net/course/detail/26558"
data-Java="https://download.csdn.net/course/detail/37238"
pid="39"
>
<a href="#" onclick="return reading();">测试 dataseta>
div>
在JavaScript里,也就是通过dataset.属性名引用的属性名是data-之后的名称。
console.log("name: "+div.dataset.userName);
HTML属性里有冒号:和句号.的,只能通过方括号语法设置和读取。console.log("preview.wtl: "+div.dataset['preview.wtl']);
console.log("preview:cpp: "+div.dataset['preview:cpp']);
console.log("Java: "+div.dataset.java);
<html>
<body>
<div id="test" data-url="https://blog.csdn.net/infoworld"
data-user-name="infoworld"
data-download_1="https://download.csdn.net"
data-preview.wtl="https://edu.csdn.net/course/detail/26149"
data-preview:cpp="https://edu.csdn.net/course/detail/26558"
data-Java="https://download.csdn.net/course/detail/37238"
pid="39"
>
<a href="#" onclick="return reading();">测试 dataseta>
div>
body>
<script>
function reading(){
let div = document.querySelector("#test");
console.log("url: "+div.dataset.url);
console.log("name: "+div.dataset.userName);
div.dataset.userName = "Tobey";
console.log("name: "+div.dataset.userName);
console.log("download_1: "+div.dataset.download_1);
console.log("download_1: "+div.dataset['download_1']);
// 普通属性
console.log("pid: "+div.getAttribute("pid"));
div.setAttribute("pid",100);
console.log("pid: "+div.getAttribute("pid"));
// 大写字母会转换为小写调用
console.log("Java: "+div.dataset.java);
// 句号和冒号需要用方括号语法设置和读取。
console.log("preview.wtl: "+div.dataset['preview.wtl']);
console.log("preview:cpp: "+div.dataset['preview:cpp']);
}
script>
html>
url: https://blog.csdn.net/infoworld
dataset.html:20 name: infoworld
dataset.html:22 name: Tobey
dataset.html:24 download_1: https://download.csdn.net
dataset.html:25 download_1: https://download.csdn.net
dataset.html:28 pid: 39
dataset.html:30 pid: 100
dataset.html:33 Java: https://download.csdn.net/course/detail/37238
dataset.html:36 preview.wtl: https://edu.csdn.net/course/detail/26149
dataset.html:37 preview:cpp: https://edu.csdn.net/course/detail/26558