jQueryは最初を除くすべてのテーブル行を削除します


280

jQueryを使用して、テーブルの最初の行を除くすべての行を削除するにはどうすればよいですか?これは、インデックスセレクターを使用する最初の試みです。例を正しく理解していれば、以下が機能するはずです。

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

「jQueryオブジェクトでいくつかのテーブルをラップし、そのような行の要素インデックスが0より大きいすべての 'tr'要素(行)を削除します」と読みます。実際には、エラーを生成せずに実行されますが、テーブルから行は削除されません。

私には何が欠けていますか、そしてこれをどのように修正しますか?もちろん、そのままのJavaScriptを使用することもできますが、jQueryをとても楽しんでいるので、jQueryを使用してこれを解決したいと思います。


特定のコードが機能しない理由を誰かが知っていますか?フィルターセレクターを削除機能に配置するときにも問題があります
Leto

1
$(一部のテーブルセレクター)がテーブル要素のみを選択し、その子は選択しないため、上記のコードはうまく理解できたため、remove関数が検索するための 'tr'要素はありません。関数findを使用すると、テーブル要素の子の間で一致するものが検索されます。
ケン・ポール・

回答:


522

これはうまくいくはずです:

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

2
firstとseconde以外のテーブル行を削除したい場合はどうなりますか?

18
@ user594166はgt(0)の代わりにgt(1)を使用します。
christianvuerings 2011

6
jQuery Webサイトから: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 2016年

あなたのコードは私にとってはうまくいきませんでした。私は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

これを実現する別の方法は、テーブルのthead要素とtbody要素でjQueryのempty()関数を使用することです。

テーブルの例:

<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();
MarcoMuciño2014年

30

セレクターは、remove内にある必要はありません。

次のようになります。

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

つまり、IDがtableIDのテーブルの最初の行を除くすべての行を選択し、それらをDOMから削除します。


同意する。私の場合、テーブルオブジェクトは以前に選択されていました。
ケン・ポール

最初の行を除くすべての行を削除するには:-$( "#tableID tr:gt(1)")。remove();
Biki、2015

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

その「スライス」は他のすべてのアプローチよりも高速であることを覚えているので、ここに置いてください。


うまくいかなかったものもあります。受け入れられた答えはトリックをするようです。
ankush981

gt廃止予定です。これが最良の答えです。
Cyber​​Ed


3

最初の行(ヘッダーを除く)を除くすべての行を削除するには、以下のコードを使用します。

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


1

最も簡単な方法:

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

-まずテーブルを参照します
-要素のリストを取得してスライスし、リストの選択された要素を削除します


0

-申し訳ありませんが、これは非常に遅い返信です。

行(および反復による他のすべての行)を削除するために見つけた最も簡単な方法はこれです

$( '#rowid'、 '#tableid')。remove();

残りは簡単です。



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("");

ええ、それはすでに複数回投稿されていました。新しいもの?
Nico Haase、2018

0

これは私の場合次のように機能し、うまく機能しました

$("#compositeTable").find("tr:gt(1)").remove();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.