| 
                            
                                  HTML5 引入的自定义数据属性(data-*)为开发者提供了一种将自定义数据嵌入HTML元素的标准方法。 这个特性使得在不使用非标准属性或额外的 DOM 属性的情况下,能够在 HTML 元素上存储额外信息。 基本概念自定义数据属性以 data- 为前缀,后面跟着自定义的属性名。例如: 
	
		
			| 1 | <div id="user" data-id="1234" data-user="johndoe" data-date-of-birth="1980-01-01">John Doe</div> |  这里,我们定义了三个自定义数据属性:data-id、data-user 和 data-date-of-birth。 使用自定义数据属性1. 在 HTML 中定义自定义数据属性可以在任何 HTML 元素上定义: 
	
		
			| 1 2 3 4 5 6 7 | <article   id="electriccars"   data-columns="3"   data-index-number="12314"   data-parent="cars">   ... </article> |  2. 通过 JavaScript 访问可以使用 dataset 属性来访问元素的自定义数据: 
	
		
			| 1 2 3 4 | const article = document.querySelector('#electriccars'); console.log(article.dataset.columns); // "3" console.log(article.dataset.indexNumber); // "12314" console.log(article.dataset.parent); // "cars" |  注意:在 JavaScript 中,属性名会自动从 kebab-case 转换为 camelCase。 3. 通过 JavaScript 修改同样可以使用 dataset 来修改自定义数据属性: 
	
		
			| 1 | article.dataset.columns = 5; |  4. 在 CSS 中使用可以在 CSS 中使用属性选择器来基于自定义数据属性应用样式: 
	
		
			| 1 2 3 4 5 6 | article[data-columns='3'] {   width: 400px; } article[data-columns='4'] {   width: 600px; } |  高级用法1. 存储 JSON 数据可以在自定义数据属性中存储 JSON 数据: 
	
		
			| 1 | <div id="user-data" data-user='{"name":"John", "age":30, "city":"New York"}'></div> |  在 JavaScript 中解析: 
	
		
			| 1 2 3 | const userData = document.getElementById('user-data'); const user = JSON.parse(userData.dataset.user); console.log(user.name); // "John" |  2. 事件委托自定义数据属性在事件委托中特别有用: 
	
		
			| 1 2 3 4 5 | <ul id="user-list">   <li data-user-id="1" data-user-name="Alice">Alice</li>   <li data-user-id="2" data-user-name="Bob">Bob</li>   <li data-user-id="3" data-user-name="Charlie">Charlie</li> </ul> |  
	
		
			| 1 2 3 4 5 6 | document.getElementById('user-list').addEventListener('click', function(e) {   if (e.target.tagName === 'LI') {     console.log('Clicked on user:', e.target.dataset.userName);     console.log('User ID:', e.target.dataset.userId);   } }); |  3. 动态内容加载自定义数据属性可用于存储动态内容加载所需的信息: 
	
		
			| 1 | <button data-load-url="/api/users" data-target="#user-container">Load Users</button> |  
	
		
			| 1 2 3 4 5 | document.querySelector('button').addEventListener('click', function() {   const url = this.dataset.loadUrl;   const target = this.dataset.target;   // 使用 url 加载数据并更新 target 元素 }); |  最佳实践
	命名规范:使用有意义的、描述性的名称。遵循 kebab-case 命名约定(例如 data-user-id 而不是 data-userId)。避免存储敏感信息:自定义数据属性是公开可见的,不要用于存储敏感数据。保持数据简单:虽然可以存储复杂的数据结构,但最好保持简单,便于维护。不要过度使用:自定义数据属性应该用于存储与元素紧密相关的数据,而不是作为通用存储机制。考虑性能:大量使用自定义数据属性可能会增加 HTML 的大小,影响页面加载速度。保持一致性:在整个项目中保持自定义数据属性使用的一致性。 实际应用示例:交互式图表 以下是一个使用自定义数据属性创建简单交互式图表的例子: 
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <!DOCTYPE html> <html lang="zh-CN"> <head>     <meta charset="UTF-8">     <title>交互式图表</title>     <style>         .bar {             fill: steelblue;             cursor: pointer;         }         .bar:hover {             fill: brown;         }     </style> </head> <body>     <svg width="500" height="300">         <g id="chart">             <rect class="bar" x="0" y="0" width="50" height="200" data-value="200" data-category="A"></rect>             <rect class="bar" x="60" y="50" width="50" height="150" data-value="150" data-category="B"></rect>             <rect class="bar" x="120" y="100" width="50" height="100" data-value="100" data-category="C"></rect>             <rect class="bar" x="180" y="70" width="50" height="130" data-value="130" data-category="D"></rect>             <rect class="bar" x="240" y="120" width="50" height="80" data-value="80" data-category="E"></rect>         </g>     </svg>     <div id="info"></div>     <script>         document.getElementById('chart').addEventListener('click', function(e) {             if (e.target.classList.contains('bar')) {                 const value = e.target.dataset.value;                 const category = e.target.dataset.category;                 document.getElementById('info').textContent = `类别 ${category}: ${value}`;             }         });     </script> </body> </html> |  在这个例子中: 
	我们使用 data-value 和 data-category 属性存储每个条形的数据。通过事件委托,我们可以轻松地处理所有条形的点击事件。当点击一个条形时,我们使用存储在自定义数据属性中的信息来更新显示。 浏览器兼容性自定义数据属性在所有现代浏览器中都得到了很好的支持。然而,在使用 dataset 属性时,需要注意 IE 10 及以下版本不支持此属性。对于需要支持旧版浏览器的项目,可以使用 getAttribute 方法作为替代: 
	
		
			| 1 2 3 4 | // 现代浏览器 const value = element.dataset.myValue; // 兼容旧浏览器 const value = element.getAttribute('data-my-value'); |  
 |