2011-02-10 77 views
2

在此代碼中,我需要獲取DOM對象,即.tabs委託人所針對的原始選擇器。獲取.delegate的選擇器

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

如何確定什麼是.tabs並訪問該對象?

+0

爲什麼需要選擇? – BoltClock 2011-02-10 10:30:00

+0

選擇器或甚至任何。只要我能以'匿名'的方式訪問.tabs,並且可能比li-a的父級遍歷更好。頁面上有不同的選項卡,需要處理有點不同。 – 2011-02-10 10:34:02

回答

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 
}); 

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 
    } 
}); 

更新:

Event對象可通過event.originalEvent獲取。所以,你可以這樣做:

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

但似乎currentTarget僅在IE9支持,並有較低的IE版本別無選擇。

因此,大多數跨瀏覽器兼容的解決方案仍然是上面的那些。

2

使用.on()方法,您可以通過將事件對象傳遞給函數並訪問其delegateTarget屬性來訪問委託目標。

例子:

$('.foo').on('click', 'a', function(ev) { 
    // this is the .foo element for this anchor 
    console.log(ev.delegateTarget); 
}); 

工作實例:http://jsfiddle.net/corydorning/ZzADh/