Удалить все строки в таблице HTML


99

Как я могу удалить все строки HTML-таблицы, кроме той <th>, с помощью Javascript, без перебора всех строк в таблице? У меня очень большая таблица, и я не хочу останавливать пользовательский интерфейс, пока я просматриваю строки, чтобы удалить их


2
Должен быть цикл, нет команды «удалить несколько элементов», метод removeChildпринимает только один элемент DOM.
Шиме Видас

@SLaks, предполагая, что он имел в виду строку, содержащую строки заголовка
Eonasdan 01

Ответы:


92

Держите <th>строку в <thead>и других строк в <tbody>то заменить <tbody>на новый, пустой.

т.е.

var new_tbody = document.createElement('tbody');
populate_with_new_rows(new_tbody);
old_tbody.parentNode.replaceChild(new_tbody, old_tbody)

Это наиболее эффективное решение, если, конечно, разработчику JavaScript разрешено изменять HTML.
Blazemonger 01

1
Остерегайтесь, если вы собираетесь заменить tbody с помощью свойства innerHTML, это не будет работать в IE, хотя есть обходной путь.
азиз пунджани 01

2
@Eonasdan - Это несколько субъективно. Существует множество библиотек (сейчас я предпочитаю использовать YUI 3), если кто-то с этой проблемой захочет решить эту проблему с помощью одной из них. Принципы будут одинаковыми, независимо от того, какой огромный кусок стороннего кода вы хотите включить.
Квентин

3
Некромантинг ... что не так с: document.getElementById('tbody').innerHTML = '';
Trees4theForest

2
@ Trees4theForest У меня это отлично работает. Наверное, во время ОП это было невозможно.
Мабу

96

это удалит все строки:

$("#table_of_items tr").remove(); 

42
Если вы не хотите удалять заголовок: $ ("# table_of_items tbody tr"). Remove ();
TTT

1
Очень хороший простой ответ. Я использовал в своем CoffeeScript - мне нравятся однострочные решения$("tbody#id tr").remove()
n2o

Я думаю, что это лучший ответ, чем принятый, хотя это зависит от того, хотите вы использовать JQuery или нет. Но почему-то .remove не работал в Chrome.
Милинд Таккар

TTT, используйте теги <thead><th></th> </thead> для создания заголовка для таблицы. Затем $ ("# table_of_items tr"). Remove (); отлично работает для вас, потому что удаляет только теги <tr>.
Кейт

TTT, пожалуйста, добавьте свой комментарий к ответу. Ваш ответ идеален!
Khorshid

59

Очень грубо, но это тоже работает:

var Table = document.getElementById("mytable");
Table.innerHTML = "";

9
К сожалению, это не сохраняет заголовки <th>, как запрашивает OP.
JoSeTe4ever 01

1
Это происходит, если они помещают свои заголовки в <th> файл <thead>. В любом случае, это, вероятно, наиболее синтаксически правильный способ построения таблицы.
Джон Блэк

Прекрасно работает. Я думаю, что это подходит только людям вроде меня, которые создали заголовок таблицы, строку, ячейку, тело всего в JQuery.
Шамсул Арефин Саджиб 02

Это хорошо сработало только для очистки HTML внутри тела :)
RudyOnRails

Я очистил только тело с небольшой модификацией var bodyRef = document.getElementById('myTable').getElementsByTagName('tbody')[0]; bodyRef.innerHTML = '';
azyth

17

Это старый вопрос, но недавно у меня была похожая проблема.
Я написал этот код, чтобы решить эту проблему:

var elmtTable = document.getElementById('TABLE_ID_HERE');
var tableRows = elmtTable.getElementsByTagName('tr');
var rowCount = tableRows.length;

for (var x=rowCount-1; x>0; x--) {
   elmtTable.removeChild(tableRows[x]);
}

Это удалит все строки, кроме первой.

Ура!


9
короче (и быстрее): var rowCount = myTable.rows.length; while (- rowCount) myTable.deleteRow (rowCount);
Петар

Код в комментарии выше не удаляет первую строку
PrfctByDsgn

17

На заметку: Остерегайтесь распространенных ошибок :

Если ваш начальный индекс равен 0 (или некоторый индекс от начала), то правильный код:

var tableHeaderRowCount = 1;
var table = document.getElementById('WRITE_YOUR_HTML_TABLE_NAME_HERE');
var rowCount = table.rows.length;
for (var i = tableHeaderRowCount; i < rowCount; i++) {
    table.deleteRow(tableHeaderRowCount);
}

НОТЫ

1. аргумент для deleteRow фиксирован,
это необходимо, поскольку при удалении строки количество строк уменьшается.
т.е. к тому времени, когда я достигнет (rows.length - 1) или даже до того, как эта строка уже будет удалена, у вас будет некоторая ошибка / исключение (или тихое).

2. rowCount берется до начала цикла for, поскольку при удалении "table.rows.length" будет продолжать меняться, так что снова у вас есть проблема, когда удаляются только нечетные или четные строки.

Надеюсь, это поможет.


10

Предполагая, что у вас есть только одна таблица, поэтому вы можете ссылаться на нее только по типу. Если вы не хотите удалять заголовки:

$("tbody").children().remove()

в противном случае:

$("table").children().remove()

Надеюсь, поможет!


7

Мне нужно было удалить все строки, кроме первой и решения, опубликованного @strat, но это привело к неперехваченному исключению (ссылка на узел в контексте, где он не существует). Следующее сработало для меня.

var myTable = document.getElementById("myTable");
var rowCount = myTable.rows.length;
for (var x=rowCount-1; x>0; x--) {
   myTable.deleteRow(x);
}

7

Если вы можете объявить IDfor, tbodyвы можете просто запустить эту функцию:

var node = document.getElementById("tablebody");
while (node.hasChildNodes()) {
  node.removeChild(node.lastChild);
}

5

это будет работать с удалением итерации в таблице HTML в собственном

document.querySelectorAll("table tbody tr").forEach(function(e){e.remove()})

5

приведенный ниже код отлично работает. Удаляет все строки, кроме строки заголовка. Итак, этот код действительно т

$("#Your_Table tr>td").remove();

3
подождите, это ответ jQuery, исходный вопрос не касался конкретно решения jQuery!
revelt 06

4

Присваивание некоторого идентификатора тегу tbody. т.е. После этого следующая строка должна сохранить верхний / нижний колонтитул таблицы и удалить все строки.

document.getElementById("yourID").innerHTML="";

И, если вы хотите, чтобы вся таблица (заголовок / строки / нижний колонтитул) была стерта, установите идентификатор на уровне таблицы, т.е.


3

Если вы не хотите удалять, thа просто хотите удалить строки внутри, это отлично работает.

var tb = document.getElementById('tableId');
  while(tb.rows.length > 1) {
  tb.deleteRow(1);
}

3

Как насчет этого:

При первой загрузке страницы сделайте следующее:

var myTable = document.getElementById("myTable");
myTable.oldHTML=myTable.innerHTML;

Затем, когда вы захотите очистить таблицу:

myTable.innerHTML=myTable.oldHTML;

Результатом будут строки заголовка, если это все, с чего вы начали, производительность значительно выше, чем при циклическом выполнении.


очень элегантное решение
revelt 06

2

Если у вас гораздо меньше <th>строк, чем строк, не являющихся <th>строками, вы можете собрать все <th>строки в строку, удалить всю таблицу и затем записать, <table>thstring</table>где раньше была таблица.

РЕДАКТИРОВАТЬ: Где, очевидно, «thstring» - это html для всех строк <th>s.


1
Вместо этого соберите <th>s как элементы DOM, очистите innerHTML таблицы, а затем снова добавьте <th>к нему s.
Entonio 01

Остерегайтесь, если вы собираетесь заменить clear tbody с помощью свойства innerHTML, это не будет работать в IE, хотя есть обходной путь.
азиз пунджани 01

2

Это работает в IE без необходимости даже объявлять переменную для таблицы и удаляет все строки:

for(var i = 0; i < resultsTable.rows.length;)
{   
   resultsTable.deleteRow(i);
}

1

это простой код, который я написал для решения этой проблемы, не удаляя строку заголовка (первую).

var Tbl = document.getElementById('tblId');
while(Tbl.childNodes.length>2){Tbl.removeChild(Tbl.lastChild);}

Надеюсь, это сработает для вас !!.


1

Присвойте своему телу идентификатор или класс.

document.querySelector("#tbodyId").remove();
document.querySelectorAll(".tbodyClass").remove();

Вы можете назвать свой идентификатор или класс как хотите, не обязательно #tbodyIdили .tbodyClass.


0

Просто очистите тело таблицы.

$("#tblbody").html("");

2
html () на самом деле является методом jQuery.
carlodurso

-1

const table = document.querySelector ('таблица'); table.innerHTML === ''? нуль: table.innerHTML = ''; приведенный выше javascript отлично работал у меня. Он проверяет, содержит ли таблица какие-либо данные, а затем очищает все, включая заголовок.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.