HTML的data-*实用例子合集(js开发场景+说明)
🌟 HTML data-* 实用例子合集(开发场景 + 说明)
1️⃣ 绑定用户/对象信息
场景:按钮或列表项需要绑定后台对象 ID,以便 JS 处理事件。
<button data-user-id="123" data-role="admin">查看资料</button>
<script>
const btn = document.querySelector('button');
btn.addEventListener('click', () => {
console.log(`用户ID: ${btn.dataset.userId}, 角色: ${btn.dataset.role}`);
});
</script>
说明:
- 无需隐藏 input 或全局 JS 对象。
dataset自动把data-user-id转成dataset.userId。
2️⃣ 事件委托 + 动态列表
场景:列表项点击事件,动态生成或删除列表。
<ul id="todo-list">
<li data-id="1">任务 1</li>
<li data-id="2">任务 2</li>
</ul>
<script>
document.getElementById('todo-list').addEventListener('click', e => {
if (e.target.tagName === 'LI') {
alert(`点击任务 ID: ${e.target.dataset.id}`);
}
});
</script>
说明:
- 避免为每个
<li>单独绑定事件,提高性能。 - 支持动态添加/删除列表项。
3️⃣ 状态控制(折叠/展开面板)
<div class="accordion" data-state="collapsed">
<h3>标题</h3>
<div class="content">内容...</div>
</div>
<script>
const accordion = document.querySelector('.accordion');
accordion.addEventListener('click', () => {
accordion.dataset.state = accordion.dataset.state === 'collapsed' ? 'expanded' : 'collapsed';
accordion.querySelector('.content').style.display =
accordion.dataset.state === 'expanded' ? 'block' : 'none';
});
</script>
说明:
- 状态信息保存在 HTML 上,JS 逻辑清晰。
- 不需额外变量管理状态。
4️⃣ 配置参数存储
场景:组件初始化时读取参数。
<div class="carousel" data-autoplay="true" data-interval="3000">
<img src="1.jpg">
<img src="2.jpg">
</div>
<script>
const carousel = document.querySelector('.carousel');
const autoplay = carousel.dataset.autoplay === 'true';
const interval = parseInt(carousel.dataset.interval);
console.log(autoplay, interval); // true 3000
说明:
- HTML 配置 + JS 初始化,方便维护和复用。
- 可直接通过
dataset获取布尔、数字或字符串。
5️⃣ 临时标记或调试
场景:在开发或调试时标记元素。
<div data-temp-id="debug-01">测试元素</div>
说明:
- 调试期间无需修改 JS 逻辑。
- 元素在页面可视化查看,便于快速定位问题。
6️⃣ 表单附加信息
场景:提交表单时,额外传递业务信息。
<form id="commentForm">
<textarea name="comment"></textarea>
<button type="submit" data-post-id="42">提交评论</button>
</form>
<script>
document.getElementById('commentForm').addEventListener('submit', e => {
e.preventDefault();
const postId = e.target.querySelector('button').dataset.postId;
const content = e.target.comment.value;
console.log(`Post ID: ${postId}, Comment: ${content}`);
});
</script>
说明:
- 避免在 JS 里硬编码 postId 或查找额外元素。
- 表单逻辑清晰、可维护性高。
7️⃣ 多选/批量操作标记
场景:批量删除或批量处理列表项。
<ul id="items">
<li data-id="1"><input type="checkbox"></li>
<li data-id="2"><input type="checkbox"></li>
<li data-id="3"><input type="checkbox"></li>
</ul>
<button id="deleteBtn">删除选中</button>
<script>
document.getElementById('deleteBtn').addEventListener('click', () => {
const items = document.querySelectorAll('#items li');
items.forEach(item => {
if (item.querySelector('input').checked) {
console.log('删除 ID:', item.dataset.id);
item.remove();
}
});
});
</script>
说明:
data-id绑定业务对象 ID- 可与 checkbox 或其他状态控件结合使用。
✅ 使用 data-* 的最佳实践 Checklist
| 项目 | 检查点 |
|---|---|
| 安全 | 不与 HTML 原生属性冲突 |
| 命名规范 | 小写 + 连字符 + 描述性,例如 data-user-id |
| JS 使用 | 通过 element.dataset 访问 |
| 状态管理 | 可存储组件状态,避免全局变量 |
| 性能 | 尽量避免大量 dataset 操作在循环内频繁 DOM 访问 |
| 事件结合 | 支持事件委托、动态列表操作 |
| 可维护性 | HTML 数据清晰可读,易于调试 |