2010-09-28 82 views
2

告诉我什么,我需要纠正,以重复点击另一个单元格TR以前的事件都将被删除如何删除以前的事件?

Full example

$('table tbody tr').each(function() { 
    $('table tr:even').addClass('even'); 

    $(this).hover(function(){ 
     $(this).toggleClass("active"); 
    }); 

    $(this).click(function(){ 
     $(this).closest('tr').toggleClass('visited'); 
    }) 

}); 
+0

你想要做什么? – marcgg 2010-09-28 10:19:16

+0

我试图点击任何单元格“TR”(添加类),然后我需要删除它(点击另一个单元格“TR”后) – Algorithm 2010-09-28 10:26:27

+1

不要忘记接受答案(点击接受的勾号) 。此外,现在你有一个代表=> 15,你可以投票。这会让民众更倾向于在未来帮助你。 – 2010-09-28 10:46:43

回答

2

您可以通过添加一点到您当前的.click()处理程序,如下所示:

$(this).click(function(){ 
    $(this).closest('tr').toggleClass('visited').siblings().removeClass('visited'); 
}); 

You can test it out here。当你获得更多的元素虽然,行级处理程序获取效率低,你应该在.delegate()看,而不是像这样:

$('table tr:even').addClass('even'); 
$('table tbody').delegate('tr', 'mouseenter', function() { 
    $(this).addClass("active"); 
}).delegate('tr', 'mouseleave', function() { 
    $(this).removeClass("active"); 
}).delegate('tr', 'click', function(){ 
    $(this).closest('tr').toggleClass('visited').siblings().removeClass('visited'); 
});​ 

You can test that version here,如果不走这条路,至少移动
$('table tr:even').addClass('even');在循环之外,它只需要运行一次:)

+0

+1对于chianing – RobertPitt 2010-09-28 10:25:32

2

我猜你想做的事就是删除以前的选择。 Here's a working fiddle

基本上,在这个例子中,我从所有兄弟行取出visited类:

$(this).siblings().removeClass('visited'); 

此外,有没有任何理由使用:

$(this).closest("tr").toggleClass('visited'); 

时,你可以使用:

$(this).toggleClass('visited'); // $(this) is a <tr> 
+0

非常感谢您 – Algorithm 2010-09-28 10:27:57

+0

@Algorithm - 不要忘记标记接受的答案,就像您在其他问题上一样。 – GenericTypeTea 2010-09-28 10:29:07

1

这个怎么样?

$('table tr:even').addClass('even'); 

$('table tr').hover(function() { 
    $(this).toggleClass("active"); 
}); 

这将涵盖甚至突出显示和悬停。其他建议将适用于访问效果。

2

你可以减少你的jQuery相当多,并缓存性能。

这里是支小提琴:http://jsfiddle.net/HTerC/

这里是jQuery的

$rows = $('table tbody tr'); 
$rows.click(function(){ 
    $(this).addClass('visited'); 
    $(this).siblings().removeClass('visited'); 
}); 

$rows.hover(function(){ 
    $(this).toggleClass('active'); 
}); 

你会想它包装在一个$(document).ready()以及

+0

如果你在表现之后,这并不比链接更好...更重要的是,最大的性能提升是使用'.delegate()',而不是多次执行'$(this)'在每个处理程序中:)您的小提琴链接是否在您的答案中使用了代码,错误链接? ;) – 2010-09-28 10:51:45

1

使你的JS更consise,我想我已经整理你需要做的事

$('table tbody tr').hover(function(){ 
    $(this).toggleClass("active"); 
}).click(function(){ 
    $(this).addClass("visited").siblings().removeClass("visited"); 
}).filter(":even").addClass('even'); 

所以你有悬停着色,点击访问,取消选择其他人,我不知道你是否也想单击取消选择,如果你只是将addClass改回toggleClass。