2010-09-28 33 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。