新闻中心
从HTML元素中获取自定义数据属性(data-)的J*aScript教程

场景描述:从HTML元素获取自定义数据
在web开发中,我们经常需要将一些额外的数据附加到html元素上,以便在j*ascript中进行处理。html5引入的data-*自定义数据属性为此提供了一种标准且语义化的方式。例如,你可能有一个动态生成的下拉菜单,每个选项都关联一个唯一的data-id,当用户选择某个选项时,你需要获取这个data-id进行后续操作。
考虑以下HTML
<select onchange="sendInfo(this)" class="form-select js-dropdown" data-id="123" name="Item_Id[1]" id="ItemId1" required="required">
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
</select>当此下拉菜单的值发生变化时,onchange="sendInfo(this)" 会触发 sendInfo J*aScript 函数,并将当前触发事件的元素(即
方法一:使用 getAttribute() 获取属性值
Element.getAttribute() 方法是一个通用的DOM API,用于获取指定元素上某个属性的字符串值。它适用于获取任何HTML属性,包括标准的属性(如id, name, class)和自定义的data-*属性。
语法:element.getAttribute(attributeName)
其中 attributeName 是你想要获取的属性的完整名称,例如 'data-id'。
示例代码:
function sendInfo(e) {
// e 是触发事件的 <select> 元素
console.log("选中的值:", e.value);
// 使用 getAttribute() 获取 data-id
const dataId = e.getAttribute('data-id');
console.log("获取到的 data-id (使用 getAttribute):", dataId);
}特点:
- 通用性强: 可以获取任何HTML属性的值。
- 直接: 通过属性的完整字符串名称来访问。
方法二:使用 dataset 属性获取 data-* 值
HTMLElement.dataset 属性提供了一种更简洁、更语义化的方式来访问元素的 data-* 属性。它返回一个 DOMStringMap 对象,其中包含了元素上所有 data-* 属性的键值对。使用 dataset 时,data- 前缀会被省略,并且如果属性名中包含连字符,它会自动转换为驼峰命名法。
青泥AI
青泥学术AI写作辅助平台
360
查看详情
语法:element.dataset.keyName
其中 keyName 是 data-* 属性名中 data- 之后的部分,并转换为驼峰命名。例如,data-id 对应 dataset.id,data-user-name 对应 dataset.userName。
示例代码:
function sendInfo(e) {
// e 是触发事件的 <select> 元素
console.log("选中的值:", e.value);
// 使用 dataset 属性获取 data-id
const dataId = e.dataset.id; // 注意:data-id 对应 dataset.id
console.log("获取到的 data-id (使用 dataset):", dataId);
}特点:
- *专为 `data-` 设计:** 更符合语义化,代码更清晰。
- 自动驼峰命名: 处理包含连字符的属性名时更方便。
- 简洁性: 访问 data-* 属性时代码量更少。
两种方法的对比与选择
| 特性 | getAttribute() | dataset |
|---|---|---|
| 适用范围 | 任何HTML属性(标准或自定义) | 仅限 data-* 自定义属性 |
| 访问方式 | 通过完整的字符串属性名(如 'data-id') | 通过 dataset 对象,省略 data- 前缀,并自动转驼峰命名(如 dataset.id) |
| 简洁性 | 稍显冗长 | 对于 data-* 属性更简洁 |
| 兼容性 | 广泛支持(老旧浏览器也支持) | 现代浏览器支持良好(IE10+) |
何时选择哪种方法:
- 推荐 dataset: 当你需要访问元素的 data-* 属性时,dataset 是更现代、更推荐的选择,因为它更简洁、更具可读性,并且专为此目的设计。
- 使用 getAttribute(): 当你需要获取非 data-* 的标准HTML属性(如 href, src, alt 等),或者需要支持非常老的浏览器时,getAttribute() 是唯一的选择。
注意事项
- 确保获取正确的DOM元素: 在事件处理函数中,this 关键字通常指向触发事件的元素。如果事件监听器是通过 addEventListener 添加的,那么事件对象 event 的 event.target 属性将指向触发事件的元素。确保你的函数参数 e 正确地代表了你想要操作的DOM元素。
-
属性不存在的处理: 如果你尝试获取一个不存在的属性,getAttribute() 会返回 null,而 dataset 属性会返回 undefined。在实际应用中,你可能需要进行判断以避免潜在的错误:
const dataId = e.dataset.id; if (dataId !== undefined) { // 属性存在,进行操作 } else { // 属性不存在 } - 动态生成属性: 如果你的 data-id 值是动态生成的(如示例中的 '+counter+'),确保在HTML字符串拼接时,属性值被正确地引用和赋值。
总结
掌握从HTML元素中获取自定义数据属性的方法是前端开发中的一项基本技能。无论是使用通用的 getAttribute() 还是更现代、更专注于 data-* 属性的 dataset,理解它们的用法和适用场景,都能帮助你编写出更高效、更可维护的J*aScript代码。在多数情况下,对于 data-* 属性,dataset 将是你的首选工具。
以上就是从HTML元素中获取自定义数据属性(data-)的J*aScript教程的详细内容,更多请关注其它相关文章!
# 舟山网站建设大概费用
# 两种
# 当你
# 可以使用
# 转换为
# 如何使用
# 你想要
# 网站建设怎么插入模板
# 站内的营销推广活动
# 键值
# 盐城市新增网站推广厂家
# 哪个网站优化最好做视频
# seo网络优化师
# 宁海网站推广软件
# 优化企业网站设计方案
# 盘锦百度seo公司
# 济南定制网站建设服务
# javascript
# 专为
# 不存在
# 自定义
# r
# html元素
# 键值对
# ai
# 前端开发
# 工具
# 浏览器
# html5
# 前端
# js
# html
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口
MongoDB聚合管道:正确匹配对象数组中_id的方法
C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器
深入理解J*aScript Promise异步执行与微任务队列
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程
J*aScript教程:根据元素文本内容动态设置背景色
Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧
Django通过AJAX异步上传图片并保存至模型的完整指南
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
Yandex浏览器官方网页版入口 Yandex浏览器最新版官网
俄罗斯Yandex免登录入口_Yandex搜索引擎官网一键直达
UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】
Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】
TikTok评论显示延迟如何处理 TikTok评论刷新优化方法
Mac怎么查看崩溃日志_Mac控制台错误报告分析
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧
谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问
动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道
DLsite中文平台入口 DLsite官网内容在线查看
C++如何解决segmentation fault_C++段错误调试与原因分析
在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析
邮政快递单号查询入口 邮政快递物流信息在线查询入口
LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比
在J*a项目里如何构建对象之间的契约_接口约束的实际落地
C++如何实现单例模式_C++设计模式之线程安全的单例写法
J*aScript map 方法中处理循环元素为空数组的策略
AO3官方可用镜像 Archive of Our Own网页版最新入口
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程
sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤
php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】
Go语言中高效处理x-www-form-urlencoded表单数据
基于动态规划的房屋花卉种植最小成本算法详解
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
J*aScriptWebpack优化_J*aScript构建工具实战
京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比
C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法
J*a里如何使用forEach遍历Map_Map遍历方法说明
XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法
小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口
微信网页版官方入口直达 微信网页版网页版登录使用方法
c++中为什么推荐使用using替代typedef_c++现代化类型别名
Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口
使用Pandas转换并合并DataFrame:多列映射至统一结构
Python字典中优雅地迭代剩余元素的方法


2025-10-07
浏览次数:次
返回列表