2010-09-25 32 views
2

我正在使用jquery ui sortable。當行重新排列時,我想將行顏色重置爲斑馬條紋。這是我正在使用的代碼。如何讓jquery在執行另一個更新行顏色之前等待一個函數完成?

function reset_rows() { 
$("#rank tbody tr").removeClass("row1","row2"); 
$("#rank tbody tr:even").addClass("row1"); 
} 
$("#rank tbody").sortable({ 
update : function() { 
    reset_rows(); 
} 
}); 

該函數添加正確的行顏色,然後立即刪除它們。我怎樣才能讓jquery先刪除行類,然後將row1類加回到偶數行?它首先添加row1類,而不管我在代碼中使用函數的順序。

回答

0

嘗試使用此語法

$('rank tbody tr:even').addClass(function() { 
      $("#rank tbody tr").removeClass("row1","row2"); 
      return "row1"; 
     }); 
+0

請記住,您傳遞給'addClass()'的函數正在每個'tr:even'上調用。所以如果有20個,你從DOM中選擇* all *'#rank tbody tr「並調用'.removeClass()'20次,每次刪除你返回的前一個'row1'。所以只有最後一個仍然有'row1'類,因爲其他人已經被刪除了幾次。另外,你不會正確調用'.removeClass()'。它應該是'.removeClass('one two')'。 – user113716 2010-09-25 16:29:59

1

我不知道是否有什麼東西了你的CSS或一些這樣的,因爲基本上應該工作。我想我會做到這一點略有不同,但:

$('tbody').sortable({ 
    update: function() { 
    $('tr:odd').removeClass("even").addClass("odd"); 
    $('tr:even').removeClass("odd").addClass("even"); 
    } 
}); 

(當然你要包含那些選擇了一下,我只是做了我的例子網頁上的所有。)

Live example

你並不是真的需要兩個類(如果我誤讀了這個,而你實際上並沒有使用兩個類),你可以將一個類應用到(比如說)偶數行,這使得它更簡單:

$('tbody').sortable({ 
    update: function() { 
    $('tr:odd').removeClass("even"); 
    $('tr:even').addClass("even"); 
    } 
}); 

Live example


題外話,但我假設你使用JavaScript和類這樣做,因爲你必須支持的瀏覽器不能用CSS的nth-child僞類這樣的直接做到這一點...(可悲的是,IE6仍然是人生的現實,不是嗎? :-))

相關問題