jQuery видалити всі рядки таблиці, крім першого


280

Як користуватися jQuery, як видалити всі рядки таблиці, крім першої? Це моя перша спроба використання селекторів індексів. Якщо я правильно розумію приклади, слід працювати наступним чином:

$(some table selector).remove("tr:gt(0)");

який я б читав як "Оберніть деяку таблицю в об'єкт jQuery, потім видаліть усі елементи" tr "(рядки), де індекс елементів таких рядків більший за нуль". Насправді він виконується без генерування помилок, але не видаляє жодних рядків із таблиці.

Що мені не вистачає, і як це виправити? Звичайно, я міг би використовувати прямий JavaScript, але мені так весело з jQuery, що я хотів би вирішити це за допомогою jQuery.


Хтось знає, чому даний код не працює? У мене також є проблема при введенні селектора фільтрів у функцію видалення
Leto

1
Тепер, коли я це краще розумію, наведений вище код не працює, оскільки $ (деякий селектор таблиці) вибирає лише елемент таблиці, а не будь-який з його дочірніх, тому для функції видалення немає елементів 'tr'. Використовуючи функцію find, шукає збіги серед дітей елемента таблиці.
Кен Пол

Подивіться на цей відповідь stackoverflow.com/questions/4831334 / ...
AuthorProxy

Відповіді:


522

Це має працювати:

$(document).ready(function() {
   $("someTableSelector").find("tr:gt(0)").remove();
});

2
Що робити, якщо я хочу видалити рядки таблиць, окрім першої та другої?

18
@ user594166 використовуйте gt (1) замість gt (0).
christianvuerings

6
З веб-сайту jQuery: Because :gt() is a jQuery extension and not part of the CSS specification, queries using :gt() cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").slice(index) instead. я б рекомендував використовувати $ ("# mytable> tr"). Slice (1) .remove ();
Chris_F

ваш код для мене не працював .. Я змінив gt (0) на gt (1), і це спрацювало.
saadk

113

Я думаю, що це є більш зрозумілим, враховуючи наміри:

$('someTableSelector').children( 'tr:not(:first)' ).remove();

Використання дітей також бере участь у тому випадку, коли перший рядок містить таблицю шляхом обмеження глибини пошуку.

Якщо у вас був елемент TBODY, ви можете зробити це:

$("someTableSelector > tbody:last").children().remove();

Якщо у вас є елементи THEAD або TFOOT, вам потрібно зробити щось інше.


2
re: зробити щось інше .... це працює:$('someTableSelector > tbody:last > tr:not(:first)').remove();
Cheeso

щоб видалити всіх дітей, мені довелося використовувати подвійні лапки. Не визнав цього інакше. $("#tasks").children().remove();
Doomsknight

40

Інший спосіб досягти цього - це використання порожньої () функції jQuery з елементами thead і tbody у вашій таблиці.

Приклад таблиці:

<table id="tableId">
<thead>
    <tr><th>Col1</th><th>Col2</th></tr>
</thead>
<tbody>
    <tr><td>some</td><td>content</td></tr>
    <tr><td>to be</td><td>removed</td></tr>
</tbody>
</table>

І команда jQuery:

$("#tableId > tbody").empty();

Це видалить усі рядки, що містяться в елементі tbody вашої таблиці, і збереже елемент thead там, де має бути ваш заголовок. Це може бути корисно, коли ви хочете оновити лише вміст таблиці.


3
Це, мабуть, матиме найкращі показники з усіх пропонованих рішень, і це дуже елегантно.
the.jxc

38

Якби це я, я, мабуть, зведений до одного селектора:

$('someTableSelector tr:not(:first)').remove();

Погодьтеся, але більш специфічним він повинен сказати: $ ('someTableSelector tbody tr: not (: first)'). Remove ();
Marco Muciño

30

Вашому селектору не потрібно бути всередині вашого видалення.

Це має виглядати приблизно так:

$("#tableID tr:gt(0)").remove();

Що означає, виберіть кожен рядок, крім першого в таблиці, з ідентифікатором tableID і видаліть їх з DOM.


Я згоден. У моєму випадку об’єкт таблиці був раніше обраний.
Кен Пол

Для видалення всіх рядків, крім першого: - $ ("# tableID tr: gt (1)"). Remove ();
Бікі

9
$('#table tr').slice(1).remove();

Я пам’ятаю, натрапити на цей «фрагмент» швидше, ніж на всіх інших підходах, тому просто поклавши його сюди.


Деякі для мене це не спрацювало. Прийнята відповідь, здається, робить свою справу.
ankush981

gtзастаріло, це найкраща відповідь.
CyberEd


3

Щоб видалити всі рядки, крім першої (крім заголовка), використовуйте наведений нижче код:

$("#dataTable tr:gt(1)").remove();


1

Найпростіший спосіб:

$("#mytable").find($("tr")).slice(1).remove()

-перша посилання на таблицю -
виберіть список елементів і наріжте його та видаліть вибрані елементи зі списку


0

- Вибачте, це дуже пізня відповідь.

Найпростіший спосіб, який я знайшов, щоб видалити будь-який рядок (і всі інші рядки через ітерацію) - це це

$ ('# rowid', '# tableid'). видалити ();

Решта легко.



0

функція:

function remove_rows(tablename) { 
    $(tablename).find("tr:gt(0)").remove();        
}

тоді зателефонуйте:

remove_rows('#table1');
remove_rows('#table2');

0

Це прекрасно працює

$("#myTable tbody").children( 'tr:not(:first)' ).html("");

Так, це вже було розміщено кілька разів. Щось нове?
Ніко Хааз

0

У моєму випадку це спрацювало наступним чином і працювало чудово

$("#compositeTable").find("tr:gt(1)").remove();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.