Pomyślałem, że to może być szybki sposób na usunięcie zawartości bardzo dużej tabeli (3000 wierszy):
$jq("tbody", myTable).remove();
Ale w przeglądarce Firefox zajmuje to około pięciu sekund. Czy robię coś głupiego (poza próbą załadowania 3000 wierszy do przeglądarki)? Czy jest na to szybszy sposób?
javascript
jquery
dom
morgancodes
źródło
źródło
$('#mytable tbody').empty();
. Gwarantuje to, że opróżniony zostanie tylko korpus.Lepiej unikać wszelkiego rodzaju pętli, po prostu usuń wszystkie elementy bezpośrednio w ten sposób:
$("#mytable > tbody").html("");
źródło
html("")
połączeniaempty()
wewnętrzne$("#myTable > tbody").empty();
Nie dotknie nagłówków.
źródło
Użycie odłączenia jest o wielkości szybsze niż jakakolwiek inna odpowiedź tutaj:
$('#mytable').find('tbody').detach();
Nie zapomnij umieścić elementu tbody z powrotem w tabeli, ponieważ detach usunął go:
$('#mytable').append($('<tbody>'));
Należy również zauważyć, że podczas mówienia
$(target).find(child)
składnia wydajności jest szybsza niż$(target > child)
. Czemu? Trzask!Upływający czas do opróżnienia 3,161 wierszy tabeli
Korzystanie z metody Detach () (jak pokazano w moim przykładzie powyżej):
Korzystanie z metody empty ():
źródło
Widzę tutaj dwie kwestie:
Metody empty () i remove () jQuery w rzeczywistości wykonują całkiem sporo pracy. Zobacz profilowanie wywołań funkcji JavaScript Johna Resiga, aby dowiedzieć się, dlaczego.
Inną rzeczą jest to, że w przypadku dużych ilości danych tabelarycznych można rozważyć bibliotekę datagrid, taką jak doskonałe DataTables do ładowania danych w locie z serwera, zwiększając liczbę wywołań sieciowych, ale zmniejszając rozmiar tych wywołań. Miałem bardzo skomplikowaną tabelę z 1500 wierszami, która była dość powolna, zmiana na nową tabelę opartą na AJAX sprawiła, że te same dane wydawały się dość szybkie.
źródło
jeśli chcesz usunąć tylko szybko .. możesz zrobić jak poniżej ..
$( "#tableId tbody tr" ).each( function(){ this.parentNode.removeChild( this ); });
ale w tabeli mogą znajdować się elementy powiązane ze zdarzeniami,
w tym wypadku,
powyższy kod nie zapobiega wyciekowi pamięci w IE ... TT i nie jest szybki w FF ...
Przepraszam....
źródło
to działa dla mnie:
$(".removeRow").remove();
źródło
Możesz spróbować tego ...
var myTable= document.getElementById("myTable"); if(myTable== null) return; var oTBody = myTable.getElementsByTagName("TBODY")[0]; if(oTBody== null) return; try { oTBody.innerHTML = ""; } catch(e) { for(var i=0, j=myTable.rows.length; i<j; i++) myTable.deleteRow(0); }
źródło