jQuery事件currentTarget数据集

时间:2014-09-02 06:39:46

标签: javascript jquery jquery-data

在每个jQuery事件中,jQuery提供的currentTargetthis相同,但据我所知,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对象带入事件中。幻灯片44&amp; this presentation上的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对象的情况下获取数据的方法?

1 个答案:

答案 0 :(得分: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'>