获取.delegate的选择器

Cas*_*jne 2 jquery jquery-selectors

在这段代码中,我需要获取DOM对象,该对象.tabs委托所连接的原始选择器.

$(".tabs").delegate("li:not(.selected) a", "click", function () {
//  ^    
//  |
//  +-----------i need to get this dom object   
    var selector = $(this).selector; // <---- returns an empty string ?
    return false;
});
Run Code Online (Sandbox Code Playgroud)

如何确定是什么.tabs和访问对象?

Fel*_*ing 5

在有人找到更聪明的方法之前,解决方法可能是将事件处理程序附加到所选元素本身:

$('.tabs').click(function(event) {
    event.root = this; // or whatever name suits you best
});

$(".tabs").delegate("li:not(.selected) a", "click", function (event) {
    // event.root contains the DOM element
});
Run Code Online (Sandbox Code Playgroud)

jQuery保证事件处理程序按其附加顺序执行.

或者你根本不使用delegate并自己进行选择器测试(这可能是最好的解决方案):

$('.tabs').click(function(event) {
    if($(event.target).is("li:not(.selected) a")) {
        // this refers to the .tab DOM element
        // event.target refers to the originally clicked element
    }
});
Run Code Online (Sandbox Code Playgroud)

更新:

原始Event对象可通过event.originalEvent.所以你可以这样做:

$(".tabs").delegate("li:not(.selected) a", "click", function (event) {
    var dom = event.originalEvent.currentTarget;
});
Run Code Online (Sandbox Code Playgroud)

但它似乎currentTarget只在IE9中得到支持,并且在较低的IE版本中没有其他选择.

因此,大多数跨浏览器兼容的解决方案仍然是上述解决方案.