Hapus semua baris dalam tabel HTML


99

Bagaimana saya dapat menghapus semua baris tabel HTML kecuali yang <th>menggunakan Javascript, dan tanpa mengulang semua baris dalam tabel? Saya memiliki tabel yang sangat besar dan saya tidak ingin membekukan UI saat saya mengulang baris untuk menghapusnya


2
Harus ada perulangan, tidak ada perintah "delete-multiple-elements", metode removeChildini hanya membutuhkan satu elemen DOM.
Šime Vidas

@SLaks menganggap yang dia maksud adalah baris yang berisi baris header
Eonasdan

Jawaban:


92

Pertahankan <th>baris dalam a <thead>dan baris lainnya di <tbody>kemudian ganti <tbody>dengan yang baru, kosong.

yaitu

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

Solusi paling mudah yang paling efisien, asalkan pengembang JavaScript diizinkan untuk memodifikasi HTML.
Blazemonger

1
Berhati-hatilah, jika Anda akan mengganti tbody menggunakan properti innerHTML, ini tidak akan berfungsi di IE, namun ada solusinya.
aziz punjani

2
@Eonasdan - Itu agak subjektif. Ada banyak perpustakaan di luar sana (preferensi pribadi saya adalah menggunakan YUI 3 hari ini) jika seseorang dengan masalah ini ingin menyelesaikan masalah ini dengan salah satunya. Prinsip-prinsipnya akan sama tidak peduli potongan besar kode pihak ketiga mana yang ingin Anda sertakan.
Quentin

3
Necromancing ini ... apa yang salah dengan: document.getElementById('tbody').innerHTML = '';
Trees4theForest

2
@ Trees4theForest Ini bekerja dengan baik untuk saya. Mungkin itu tidak mungkin pada saat OP.
Mabu

96

ini akan menghapus semua baris:

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

42
Jika Anda tidak ingin menghapus header: $ ("# table_of_items tbody tr"). Remove ();
TTT

1
Jawaban sederhana yang sangat bagus. Saya menggunakan CoffeeScript saya - Saya suka solusi satu baris$("tbody#id tr").remove()
n2o

Saya pikir ini adalah jawaban yang lebih baik daripada yang diterima, meskipun itu tergantung pada apakah Anda ingin menggunakan JQuery atau tidak. Tapi entah kenapa .remove tidak berfungsi di Chrome.
Milind Thakkar

TTT, gunakan tag <thead><th></th> </thead> untuk membuat head untuk tabel. Kemudian $ ("# table_of_items tr"). Remove (); berfungsi dengan baik untuk Anda, karena hanya menghapus tag <tr>.
Kate

TTT, silakan tambahkan komentar Anda ke jawaban. Jawaban Anda sempurna!
Khorshid

59

Sangat kasar, tetapi ini juga berhasil:

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

9
Sayangnya ini tidak menyimpan header <th> seperti yang diminta OP.
JoSeTe4ever

1
Itu dilakukan jika mereka meletakkan header mereka <th> bersarang di <thead>. Ini mungkin cara paling sintaksis untuk membangun tabel.
Jon Black

Bekerja dengan baik. Saya pikir ini hanya cocok untuk orang-orang seperti saya, yang telah membuat header tabel, baris, sel, semuanya di JQuery.
Shamsul Arefin Sajib

Ini bekerja dengan baik hanya dengan membersihkan html di dalam tubuh :)
RudyOnRails

Saya hanya membersihkan bodi dengan sedikit modifikasi pada ini var bodyRef = document.getElementById('myTable').getElementsByTagName('tbody')[0]; bodyRef.innerHTML = '';
1919

17

Ini adalah pertanyaan lama, namun baru-baru ini saya mengalami masalah serupa.
Saya menulis kode ini untuk menyelesaikannya:

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]);
}

Itu akan menghapus semua baris, kecuali yang pertama.

Bersulang!


9
lebih pendek (dan lebih cepat): var rowCount = myTable.rows.length; while (- rowCount) myTable.deleteRow (rowCount);
Petar

Kode dalam komentar di atas tidak menghapus baris pertama
PrfctByDsgn

17

Poin yang perlu diperhatikan, di Waspadai kesalahan umum :

Jika indeks awal Anda adalah 0 (atau beberapa indeks dari awal), maka kode yang benar adalah:

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);
}

CATATAN

1. argumen untuk deleteRow telah diperbaiki.
Ini diperlukan karena saat kita menghapus baris, jumlah baris berkurang.
yaitu; pada saat saya mencapai (row.length - 1), atau bahkan sebelum baris itu telah dihapus, jadi Anda akan memiliki beberapa kesalahan / pengecualian (atau yang diam).

2. rowCount diambil sebelum perulangan for dimulai karena saat kita menghapus "table.rows.length" akan terus berubah, jadi sekali lagi Anda memiliki beberapa masalah, bahwa hanya baris ganjil atau genap saja yang dihapus.

Semoga membantu.


10

Dengan asumsi Anda hanya memiliki satu tabel sehingga Anda dapat mereferensikannya hanya dengan jenisnya. Jika Anda tidak ingin menghapus header:

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

jika tidak:

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

semoga membantu!


7

Saya perlu menghapus semua baris kecuali yang pertama dan solusi yang diposting oleh @strat tetapi itu menghasilkan pengecualian yang tidak tertangkap (merujuk Node dalam konteks yang tidak ada). Berikut ini berhasil untuk saya.

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

7

Jika Anda dapat mendeklarasikan IDuntuk, tbodyAnda cukup menjalankan fungsi ini:

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

5

ini akan bekerja penghapusan iterasi dalam tabel HTML secara native

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

5

berikan kode di bawah ini bekerja dengan baik. Ini menghapus semua baris kecuali baris header. Jadi kode ini benar-benar t

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

3
tunggu, ini jawaban jQuery, pertanyaan asli tidak menanyakan secara khusus solusi jQuery!
bersenang

4

Memasukkan beberapa id ke tag tubuh. mis. Setelah ini, baris berikut harus mempertahankan header / footer tabel dan menghapus semua baris.

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

Dan, jika Anda ingin seluruh tabel (header / baris / footer) dihapus, maka atur id pada tingkat tabel yaitu


3

Jika Anda tidak ingin menghapus thdan hanya ingin menghapus baris di dalamnya, ini berfungsi dengan sempurna.

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

3

Bagaimana dengan ini:

Saat halaman pertama kali dimuat, lakukan ini:

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

Kemudian ketika Anda ingin membersihkan tabel:

myTable.innerHTML=myTable.oldHTML;

Hasilnya akan menjadi baris tajuk Anda jika hanya itu yang Anda mulai, kinerjanya jauh lebih cepat daripada perulangan.


solusi yang sangat elegan
nikmati

2

Jika Anda memiliki <th>baris yang jauh lebih sedikit daripada non- <th>baris, Anda dapat mengumpulkan semua <th>baris menjadi string, menghapus seluruh tabel, dan kemudian menulis di <table>thstring</table>mana tabel sebelumnya.

EDIT: Di mana, jelas, "thstring" adalah html untuk semua baris <th>s.


1
Sebaliknya, kumpulkan <th>s sebagai elemen DOM, hapus HTML dalam tabel, lalu tambahkan <th>s ke dalamnya lagi.
entonio

Berhati-hatilah, jika Anda akan mengganti clear tbody menggunakan properti innerHTML, ini tidak akan berfungsi di IE, namun ada solusinya.
aziz punjani

2

Ini bekerja di IE tanpa harus mendeklarasikan var untuk tabel dan akan menghapus semua baris:

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

1

ini adalah kode sederhana yang baru saja saya tulis untuk menyelesaikannya, tanpa menghapus baris header (yang pertama).

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

Semoga berhasil untuk Anda !!.


1

Tetapkan id atau kelas untuk tbody Anda.

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

Anda dapat memberi nama id atau kelas sesuai keinginan Anda, tidak harus #tbodyIdatau .tbodyClass.


0

Bersihkan saja badan meja.

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

2
html () sebenarnya adalah metode jQuery.
carlodurso

-1

const table = document.querySelector ('table'); table.innerHTML === ''? null: table.innerHTML = ''; javascript di atas berfungsi dengan baik untuk saya. Ia memeriksa untuk melihat apakah tabel berisi data apa pun dan kemudian membersihkan semuanya termasuk header.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.