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

K ''
sumber
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)
Quentin
sumber
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(); 
Apparao
sumber
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 = "";
Marcel
sumber
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!

cstrat
sumber
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.

Manohar Reddy Poreddy
sumber
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!

Francisco López-Sancho
sumber
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);
}
lkan
sumber
7

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

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

ini akan bekerja penghapusan iterasi dalam tabel HTML secara native

document.querySelectorAll("table tbody tr").forEach(function(e){e.remove()})
Pemburu
sumber
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();
sid
sumber
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

Vinaykumar Patel
sumber
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);
}
Suresh Atta
sumber
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.

Len Putih
sumber
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.

yoozer8
sumber
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);
}
Lester Northe
sumber
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 !!.

pengguna3423649
sumber
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.

Andreea
sumber
0

Bersihkan saja badan meja.

$("#tblbody").html("");
siva
sumber
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.

Paus Francis
sumber