【问题标题】:jQuery event currentTarget datasetjQuery 事件 currentTarget 数据集
【发布时间】:2014-09-02 06:39:45
【问题描述】:

在每个 jQuery 事件中,jQuery 提供了 currentTarget,它与 this 相同,但据我了解,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 对象的情况下获取数据的方法吗?

【问题讨论】:

  • 您为什么想要不同的解决方案?
  • 坚持使用 jQuery 的编写方式有什么问题?
  • @arun 性能。它是一个插件。
  • jQuery 被构建为使用this 来引用自我......重写这个有什么意义?特别是如果您担心浏览器兼容性 - 这就是编写 jQuery 的原因之一!
  • 我不认为使用 jQuery 数据 api 会导致相当大的开销..

标签: javascript jquery jquery-data


【解决方案1】:

往下看接受的答案

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'>

【讨论】:

  • 感谢您的贡献。不幸的是,我使用 jQuery 数据略有不同,我没有将其附加到数据属性,而是使用 jQuery 数据方法将其附加到脚本中来设置它。我正在寻找的答案是如何从事件中携带的事件变量 (e) 访问数据,而不是再次将其包装在 jQuery 函数中。它是可访问的,但通过 currentTarget 中名为 dataset 的数据属性进行访问,我不确定每个浏览器是否都带有该属性。
  • 您可以通过调用不带“data-”的数据并将其余部分转换为小写驼峰式来获取数据。但在您的情况下,在 target 或 currentTarget(不带 jQuery)上使用 getAttribute 会更好。我认为该方法可以追溯到 IE 5。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 2020-08-10
相关资源
最近更新 更多