我有以下代码为例

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

});

用英语讲。我可能有一个 anchor 列表,其中可能有
多个跨度。每个 anchor 声明为
<a class="foo" href="#" data-info="1">
    <span> ... </span>
    <span> ... </span>
</a>

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

我将处理程序绑定(bind)到 anchor 的click事件
但事件对象随 anchor 或跨度之一返回
取决于我点击的位置。所以要获取我的html5“数据信息”值
回调我必须插入一些凌乱的代码。现在出现
在我的整个代码中,直到我猜测可能存在
惯用的JQuery处理方式。

编辑:显示我的实际问题的主干代码(请原谅coffeescript)
class DashboardView extends Backbone.View

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

  editLogItem: (e)->
    t = $(e.target).closest("a")

最佳答案

Example
$(this)也将获得您绑定(bind)的选择器定义的元素。

$("a.foo").click(function (e){
    var data = $(this).data("info");
});

您还应该使用.data而不是.attr("data-...")
编辑:

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

10-05 21:02
查看更多