如何获取存储在DOM元素中的数据
How to get data stored in a DOM element?
我有一个类bar
的DOM元素,它存储数据foo
,这是另一个DOM元素的id。
<div class="bar" data="foo">...</div>
当我将鼠标悬停在这样的元素上时,我想获得数据(id)所指向的DOM元素。我这样做了:
$(".bar").hover(function(){alert($("#"+$(this).data()));});
但是当我悬停时,我得到这个错误:
Uncaught Error: Syntax error, unrecognized expression: #[object Object]
我做错了什么,我该如何修复它?
您将data()
方法与元素的data
属性混淆了。
data()
方法返回与元素无关的数据对象,而不是您正在查找的字符串。
解决方案1 -数据作为属性
要获得您在示例中寻找的值,您应该使用attr()
方法查询属性:
$(".bar").hover(function(){alert($("#"+$(this).attr('data')));});
方案2 -数据作为对象
使用data()
方法,您可以手动将信息附加到元素:
$('.bar').data('data','foo');
$(".bar").hover(function(){alert($("#"+$(this).data('data')));});
注意,在本例中'data'
只是元素数据对象中键的任意名称。有关data()
方法的更多信息,请参阅jQuery手册
解决方案3 -数据作为对象和HTML5属性
我相信你的初衷是查询data
属性作为HTML5数据属性,根据jQuery文档应该是automatically pulled in to jQuery's data object
。
但是,请注意,根据HTML5规范,HTML5数据属性预计具有data-
前缀。因此,为了使您的示例工作,属性不能命名为data
,而应命名为data-something
。例如:
<div class="bar" data-something="foo">...</div>
你可以使用jQuery的data()
方法访问它:
$(".bar").hover(function(){alert($("#"+$(this).data('something')));});
注意data('someting')
是如何访问data-something
的,因为jQuery会自动删除data-
前缀。
您需要使用attr函数访问该属性。
$(".bar").hover(function() {
alert($("#"+$(this).attr('data')));
});
我知道没有人要求这样做,但这里是如何在没有jQuery的现代浏览器中做到这一点:
for (bar of document.getElementsByClassName('bar')) {
bar.addEventListener('hover', e => alert(
document.getElementById(e.target.attributes.data.value)
))
}
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 通过AJAX侦听向DOM添加某些元素
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- Selenium无法在浏览器DOM中定位元素
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- 从dom中删除任何元素后,Touchmove事件停止触发
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- 找到元素DOM的根节点(阴影或光)的最佳方法是什么?
- 在querySelector:如何获得第一个和最后一个元素?dom中使用的遍历顺序