处理常见JQuery事件处理模式的另一种方法

bra*_*ing 3 javascript jquery events bind

我有以下代码例如

$("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");

});
Run Code Online (Sandbox Code Playgroud)

用英语讲.我可能有一个锚点列表,其中可能有许多跨度.每个锚都声明为

<a class="foo" href="#" data-info="1">
    <span> ... </span>
    <span> ... </span>
</a>

<a class="foo" href="#" data-info="2">
    <span> ... </span>
    <span> ... </span>
</a>
...
...
Run Code Online (Sandbox Code Playgroud)

我将处理程序绑定到锚点的click事件,但事件对象返回锚点或其中一个跨度取决于我单击的位置.因此,要将我的html5"data-info"值放入回调中,我必须插入一些杂乱的代码.这现在出现在我的代码中,我猜测可能有一种惯用的JQuery方法来处理它.

编辑:Backbone片段显示我的真正问题(借口coffeescript)

class DashboardView extends Backbone.View

  events:
    "click a.foo": "editLogItem"

  editLogItem: (e)->
    t = $(e.target).closest("a")
Run Code Online (Sandbox Code Playgroud)

Ray*_*nos 7

$(this) 将获取您绑定的选择器定义的元素.

$("a.foo").click(function (e){
    var data = $(this).data("info");
});
Run Code Online (Sandbox Code Playgroud)

你也应该使用.data而不是.attr("data-...")

编辑:

如果this被覆盖,您可以使用e.currentTarget具有相同值的值.