2011-04-11 41 views
2

我讀jqFundamentals這個週末,和麗貝卡墨菲談到:拆卸,操作,追加

的$ .fn.detach方法是非常有價值的 如果你正在做的重 操縱的元素。在這個 的情況下,這對於$ .fn.detach 頁面中的元素有幫助,在代碼中對其進行處理 ,然後在完成後將其恢復到 頁面。

我有一個表的排序是這樣,這是我從「學習jQuery的」得了,第140頁:

var rows = $table.find('tr:not(:has(th))').get(); 
rows.sort(function(rowA,rowB) { 
... 
}); 
$.each(rows, function(index,row) { 
    $table.children('tbody').append(row); 
}); 

我不知道我是否應該分離表並重新呢?

+0

你打算處理多少行? – RobertPitt 2011-04-11 17:50:11

+2

detach背後的想法與遊戲中的屏幕緩衝類似。您對元素所做的任何更改都會顯示在屏幕上(使用瀏覽器資源)。如果你不關心用戶看到每一個改變完成,只有最終的結果,你可以安全地使用分離。 – Khez 2011-04-11 17:53:38

+1

這個問題的標題似乎不太符合實際的內容... – Pointy 2011-04-11 17:58:15

回答

2

分離元素會將其從DOM中移除。因此,如果要分離表格元素,整個表格可能會消失或「閃爍」,直到您將表格重新插入到DOM中。

但是,您可能只想從DOM中分離出tbody元素,然後在完成對行的排序後將其重新插入表中。

+0

var $ parent = $ table.parent(); $ table.detach(); $ parent.append($ table); – 2011-04-11 18:01:00

+0

只要保持在同一個執行線程中,不會發生閃爍。如果通過調用異步函數返回到瀏覽器,它可能會閃爍。 – 2013-02-06 15:56:35