在每个 jQuery 事件中,jQuery 都提供与 this
相同的 currentTarget
,但据我了解 currentTarget
的属性取决于在您的浏览器上。
在 chrome 中,我可以获得 event.currentTarget.dataset
,它为我提供了启动事件的元素的数据,但我认为这并不适用于所有浏览器。据我所知,唯一的跨浏览器解决方案是通过将 currentTarget 包装在另一个 jQuery 对象中来获取数据,如下所示。
var div = jQuery("<div/>").data("numbers", [1,2,3]);
div.click(function(e) {
var data = jQuery(e.currentTarget).data();
console.log(data.numbers);
});
有谁知道跨浏览器解决方案来获取数据而无需使用 this/currentTarget
创建新的 jQuery 对象?
更新:为了清楚起见,我问的原因是:
我们再次将触发事件的元素转换为 jQuery 对象,并再次通过 jQuery 发送它(它已经是创建事件的 jQuery 对象)。我希望有一种方法将已经创建的 jQuery 对象带入事件中。 this presentation 上的幻灯片 44 和 45解释一下我的思考过程。
您可以使用 event.currentTarget.dataset
来完成此操作,但我不认为它是跨浏览器解决方案。在上面的代码中,您可以使用缓存的 jQuery 对象 div
来获取数据,而无需重新创建 jQuery 对象。这适用于该特定示例,但您会如何处理像下面的 delegate
事件这样的动态事件:
jQuery("#container").on('click', '.pop-data', function(e) {
var data = jQuery(e.currentTarget).data();
alert(data);
});
上面的代码有效并且不是一个糟糕的解决方案,但是有人知道一种在不创建新的 jQuery 对象的情况下获取数据的方法吗?
最佳答案
向下查看已接受的答案
Having problems in IE8 when attempting to get data from target event
jQuery("#container").on('click', '.pop-data', function(e) {
console.log($(e.target).attr('data-numbers'));
});
就我个人而言,我无法让 .data() jQuery 的东西工作(不知道为什么),但上面的方法可以将 HTML 属性嵌入到行中。
<img src='...' data-numbers='1'>
关于javascript - jQuery 事件 currentTarget 数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25617268/