HTMLテーブルのすべての行を削除する


99

<th>JavaScriptを使用して、テーブルのすべての行をループせずに、HTMLテーブルのすべての行を削除するにはどうすればよいですか?非常に巨大なテーブルがあり、行をループして削除している間、UIをフリーズしたくない


2
ループが必要です。「delete-multiple-elements」コマンドremoveChildはなく、メソッドは単一のDOM要素のみを取ります。
–ŠimeVidas、2011

@SLaksは、ヘッダー行を含む行を意味すると想定
Eonasdan

回答:


92

<th>行をaに保持し<thead>、他の行をa <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、2011

1
innerHTMLプロパティを使用してtbodyを置き換える場合、IEでは機能しないことに注意してください。ただし、回避策はあります。
aziz punjani 2011

2
@Eonasdan —それはやや主観的です。この問題を抱えている誰かがライブラリの1つを使ってこの問題を解決したい場合、ライブラリはたくさんあります(私の個人的な好みは、最近のYUI 3を使用することです)。原則としては、サードパーティのコードのどの大きな部分を含めても同じです。
Quentin

3
これをdocument.getElementById('tbody').innerHTML = '';
壊死させる

2
@ Trees4theForestこれは私にとってはうまくいきます。OP時は無理だったかもしれません。
マブ

94

これはすべての行を削除します:

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

40
ヘッダーを削除したくない場合:$( "#table_of_items tbody tr")。remove();
TTT 2014

1
とても良い簡単な答え。私はCoffeeScriptで使用しました-1行のソリューションが好きです$("tbody#id tr").remove()
n2o 14

JQueryを使用するかどうかによって異なりますが、これは受け入れられたものよりも良い答えだと思います。しかし、どういうわけか、.removeはChromeでは機能しませんでした。
Milind Thakkar

TTT、<thead> <th> </ th> </ thead>タグを使用してテーブルのヘッドを作成します。次に、$( "#table_of_items tr")。remove(); <tr>タグのみが削除されるため、問題なく機能します。
ケイト

TTT、回答にコメントを追加してください。あなたの答えは完璧です!
Khorshid

57

非常に粗雑ですが、これでも機能します。

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

9
残念ながら、これはOPが要求するようにヘッダー<th>を保持しません。
JoSeTe4ever 2016年

1
ヘッダーを<th> 入れ子にした場合に行われます<thead>。これはおそらく、とにかくテーブルを構築するための最も構文的に正しい方法です。
ジョンブラック

よく働く。これは、JQueryのすべてのテーブルヘッダー、行、セル、tbodyを作成した私のような人々にのみ適していると思います。
Shamsul Arefin Sajib

これは
tbody

私はこれにわずかな変更を加えて体だけをクリアしました 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);
Petar 2014年

上記のコメントのコードでは、最初の行は削除されません
PrfctByDsgn

16

よくある間違いに気をつけてください:

開始インデックスが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. 「count.rows.length」を削除すると変更が続くため、forCount が開始する前にrowCountが取得されるため、奇数行または偶数行のみが削除されるという問題が発生します。

お役に立てば幸いです。


10

型だけで参照できるようにテーブルが1つしかないと仮定します。ヘッダーを削除したくない場合:

$("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

4

tbodyタグにいくつかのIDを割り当てます。すなわち。この後、次の行でテーブルのヘッダー/フッターが保持され、すべての行が削除されます。

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

また、テーブル全体(ヘッダー/行/フッター)を消去する場合は、テーブルレベルでIDを設定します。


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;

結果がヘッダー行であり、それがすべての場合、ループよりもパフォーマンスが劇的に高速です。


非常にエレガントなソリューション
レベルを上げる

2

<th>非行よりも<th>行数がはるかに少ない場合は、すべての<th>行を1つの文字列にまとめ、テーブル全体を削除してから、<table>thstring</table>以前のテーブルがあった場所に書き込むことができます。

編集:明らかに、「thstring」は<th>sのすべての行のhtmlです。


1
むしろ、<th>sをDOM要素として収集し、テーブルのinnerHTMLをクリアして<th>から、sを再びそれに追加します。
entonio、2011

注意してください。innerHTMLプロパティを使用してクリアtbodyを置き換える場合、IEでは機能しませんが、回避策があります。
aziz punjani 2011

2

これは、テーブルのvarを宣言することなく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

tbodyにIDまたはクラスを割り当てます。

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

あなたは必ずしも、あなたが望むどのようにあなたのIDまたはクラスに名前を付けることができます#tbodyId.tbodyClass



-1

const table = document.querySelector( 'table'); table.innerHTML === ''?null:table.innerHTML = ''; 上記のJavaScriptは私にとってはうまくいきました。テーブルにデータが含まれているかどうかを確認し、ヘッダーを含むすべてをクリアします。

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