Ответ 1
$("#your-table-id").empty();
Это так же быстро, как и вы.
Я думал, что это может быть быстрый способ удалить содержимое очень большой таблицы (3000 строк):
$jq("tbody", myTable).remove();
Но это займет около пяти секунд, чтобы закончить в firefox. Я делаю что-то немое (кроме попытки загрузить 3000 строк в браузер)? Есть ли более быстрый способ сделать это?
$("#your-table-id").empty();
Это так же быстро, как и вы.
Лучше избегать любых циклов, просто удалите все элементы прямо следующим образом:
$("#mytable > tbody").html("");
Использование detach намного быстрее, чем любой другой ответ здесь:
$('#mytable').find('tbody').detach();
Не забудьте положить элемент tbody обратно в таблицу, так как detach удалил его:
$('#mytable').append($('<tbody>'));
Также обратите внимание, что при эффективности $(target).find(child)
синтаксис $(target).find(child)
работает быстрее, чем $(target > child)
. Зачем? Sizzle!
Истекшее время для опустошения 3 161 строки таблицы
Используя метод Detach() (как показано в моем примере выше):
Используя метод empty():
Два вопроса, которые я вижу здесь:
Пустые() и remove() методы jQuery на самом деле выполняют небольшую работу. См. John Resig Функция JavaScript для профилирования вызовов для чего.
Другое дело, что для большого количества табличных данных вы можете рассмотреть библиотеку datagrid, такую как отличный DataTables загружать данные "на лету" с сервера, увеличивая количество сетевых вызовов, но уменьшая размер этих вызовов. У меня была очень сложная таблица с 1500 строками, которые были довольно медленными, переход на новую таблицу на основе AJAX заставил эти же данные выглядеть довольно быстро.
если вы хотите удалить только быстро.. вы можете сделать, как показано ниже.
$( "#tableId tbody tr" ).each( function(){
this.parentNode.removeChild( this );
});
но в таблице могут быть некоторые связанные с событием элементы,
в этом случае
выше код не предотвращает утечку памяти в IE... T-T и не быстро в FF...
извините....
$("#myTable > tbody").empty();
Это не коснется заголовков.
это работает для меня:
1- добавить класс для каждой строки "removeRow"
2- в jQuery
$(".removeRow").remove();
Вы можете попробовать это...
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);
}