2010-05-31 21 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