我有以下代码,例如
$("a.foo").bind(function (e){
var t;
if ( $(e.target).is("a") ){
t = $(e.target);
}else{
t = $(e.target).parent("a");
}
var data = t.attr("data-info");
});
用英语说。我可能有一个可能存在的锚点列表 一些跨度。每个锚都声明为
<a class="foo" href="#" data-info="1">
<span> ... </span>
<span> ... </span>
</a>
<a class="foo" href="#" data-info="2">
<span> ... </span>
<span> ... </span>
</a>
...
...
我将处理程序绑定到锚点的click事件 但事件对象返回锚点或其中一个跨度 取决于我点击的位置。所以要获得我的html5“数据信息”值 回调我必须插入一些凌乱的代码。这现在正在出现 在我的代码中,我猜测可能有一个 惯用的JQuery处理方法。
编辑:Backbone片段显示我的真实问题(借口coffeescript)
class DashboardView extends Backbone.View
events:
"click a.foo": "editLogItem"
editLogItem: (e)->
t = $(e.target).closest("a")
答案 0 :(得分:7)
$(this)
将获得您绑定的选择器定义的元素。
$("a.foo").click(function (e){
var data = $(this).data("info");
});
您还应该使用.data
而不是.attr("data-...")
修改强>
如果this
被覆盖,您可以使用具有相同值的e.currentTarget
。
答案 1 :(得分:1)
如果处理程序无论如何都附加到<a>
,那么处理程序中的处理程序总是this
,所以目标是什么并不重要。
$("a.foo").click(function (e){
var data = $(this).data('info');
// ...
});
另请注意,要获取“data-xxx”属性的值,可以使用“.data()”函数。
答案 2 :(得分:0)
$('a.foo').click(function () {
var data = $(this).data('info');
});
我正在使用点击处理程序,因为您特别提到了点击事件。