在每个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对象带入事件中。幻灯片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对象的情况下获取数据的方法?
答案 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'>