2011-01-11 14 views

Odpowiedz

12

Zobacz http://api.jquery.com/empty

$(selector).empty(); 

Jest to zdecydowanie najbardziej wyraźny sposób, a prawie na pewno najbardziej efektywne.

Ponieważ jest to wewnętrzny jQuery, prawdopodobnie jest bardziej wydajny niż .children().remove(), a na pewno nie mniej wydajny.

Musiałbym pomyśleć, że .html('') i .text('') są mniej wydajne, ponieważ wywołują one parsery html, a nie tylko zajmują się węzłami domowymi, jak inne metody. A nawet gdyby okazały się bardziej wydajne, wszelkie zyski w wydajności byłyby łatwo przeskalowane przez zyski w klarowności używania empty(), chyba że naprawdę potrzebujesz zoptymalizować tę sekcję z konkretnego powodu (w takim przypadku po prostu porównałbym wszystkie opcje).

+3

* "Musiałbym myśleć, że .html ('') i .text ('') są wolniejsze ..." * Nie trzeba o tym myśleć, zarówno 'html ('')' jak i 'text ('') '* call *' empty() 'w ich implementacji, a zatem są mniej wydajne z definicji. –

+0

Ha, nie wiem, jak brakowało mi pustego() – Jake

+0

@Jake, dzieje się z najlepszymi z nas =). –

3

Ponadto the answer z @Ben Lee, jeśli chcesz najszybszy sposób, jeśli wyświetlając nową treść, może warto rozważyć .detach():

var $elem = $(selector); 
var $detached = $elem.children().detach(); 

$elem.html('new content'); 
$detached.remove(); 

ten odracza czyszczenie danych, aż po wyświetleniu nowa treść. Nie testowałem wydajności, ale jestem pewien, że zobaczysz zyski podczas usuwania dużej ilości treści.

+1

Dzięki za to. Jestem ajax-loading nowych treści, więc i tak jest opóźnienie, ale jestem pewien, że wykorzystam to w przyszłości. – Jake

Powiązane problemy