2010-05-31 70 views
2

我有一個表可能包含其他內部表(不可能編輯生成的標記)。我想創建行的mouseenter和鼠標離開只觸發了相關聯的主錶行(而不是內部錶行)的委託功能,如下:jQuery委託錶行選擇器

$("#tableid").delegate("tr", "mouseenter mouseleave", function(e) { 
    //do stuff here 
    }); 

但有了這個選擇,也選擇內錶行,那麼如何修改選擇器以避免選擇內部表格行?

回答

2

可以使用.delegate()一個稍微不同的選擇,這樣的:

$("#tableid").delegate("#tableid > tbody> tr", "mouseenter mouseleave", function(e) { 
    //do stuff, for example $(this).toggleClass("hover"); 
});​ 

這工作,因爲你想<tr>元素是直接的子行,但有一個<tbody>在兩者之間,你需要考慮。 You can test a working demo here

+0

嗯,沒有意識到,+1 *爲*答案。 – Sarfraz 2010-05-31 11:31:01

+0

你認爲它是不支持'>> tbody> tr「'的錯誤嗎?該表ID必須重複在委託選擇器中? – 2010-05-31 16:58:25

+0

@Crescent - 我不認爲它是一個錯誤,每個事件發生時必須獨立檢查的上下文的任何事情都不能*整體*相對,至少我不明白。你需要一個絕對或獨立的相對選擇器,例如''tbody> tr「'工作(但不是這個問題),但是*用相對選擇器開始*會使它相對於...?請記住'.delegate()'你將一個處理程序附加到一個元素上,只是(*可能*)使用選擇器來做到這一點,但它之後就會被拋棄,不像live繼續使用它,但它可以'相對於*上下文*。 – 2010-05-31 21:00:42