javascript - jQuery 事件 currentTarget 数据集

标签 javascript jquery jquery-data

在每个 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/

相关文章:

javascript - 将 php 数组编码为键控 JSON 数组以便在 javascript 中使用?

javascript - 添加提交按钮到 jquery 星级评定

javascript - 从多行中删除行 - Javascript

javascript - 与 'react-router' .browserHistory 我得到 this.props.children == undefined

javascript - 更改 css 形状 onclick

javascript - 在 HTML 组件旁边放置一个标签

javascript - if/else jQuery 使用自定义属性

javascript - HTML5 data-* 属性类型转换字符串和数字

javascript - 将数组复制到 "this"变量上(创建类似数组的对象)

javascript - 如何在javascript正则表达式中替换没有html标签的字符串的每个字母