Xóa tất cả các hàng trong bảng HTML


99

Làm cách nào tôi có thể xóa tất cả các hàng của bảng HTML ngoại trừ các hàng <th>đang sử dụng Javascript và không lặp lại tất cả các hàng trong bảng? Tôi có một bảng rất lớn và tôi không muốn đóng băng giao diện người dùng trong khi tôi đang lặp qua các hàng để xóa chúng


2
Phải có một vòng lặp, không có lệnh "xóa nhiều phần tử", phương thức removeChildchỉ nhận một phần tử DOM duy nhất.
Šime Vidas

@SLaks giả định ý của anh ấy là hàng chứa các hàng tiêu đề
Eonasdan

Câu trả lời:


92

Giữ <th>hàng trong a <thead>và các hàng khác trong a <tbody>sau đó thay thế <tbody>bằng một hàng mới, trống.

I E

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

Dễ dàng là giải pháp hiệu quả nhất, với điều kiện là nhà phát triển JavaScript được phép sửa đổi HTML.
Blazemonger

1
Hãy lưu ý, nếu bạn định thay thế tbody bằng thuộc tính innerHTML, nó sẽ không hoạt động trong IE, tuy nhiên, có một cách giải quyết.
aziz punjani

2
@Eonasdan - Điều đó hơi chủ quan. Có rất nhiều thư viện ngoài đó (sở thích cá nhân của tôi là sử dụng YUI 3 ngày nay) nếu ai đó có vấn đề này muốn giải quyết vấn đề này với một trong số chúng. Tuy nhiên, các nguyên tắc sẽ giống nhau cho dù bạn muốn đưa vào một lượng lớn mã của bên thứ ba nào.
Quentin

3
Đang cân bằng điều này ... có gì sai với: document.getElementById('tbody').innerHTML = '';
Trees4theForest

2
@ Trees4theForest Điều này phù hợp với tôi. Có lẽ điều đó đã không thể xảy ra vào thời điểm OP.
Mabu

94

điều này sẽ xóa tất cả các hàng:

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

40
Nếu bạn không muốn xóa tiêu đề: $ ("# table_of_items tbody tr"). Remove ();
TTT

1
Câu trả lời đơn giản rất tốt. Tôi đã sử dụng trong CoffeeScript của mình - Tôi thích các giải pháp một dòng$("tbody#id tr").remove()
n2o

Tôi nghĩ đây là câu trả lời tốt hơn câu được chấp nhận, mặc dù nó phụ thuộc vào việc bạn có muốn sử dụng JQuery hay không. Nhưng bằng cách nào đó .remove không hoạt động trên Chrome.
Milind Thakkar 22/09/15

TTT, sử dụng thẻ <thead><th></th> </thead> để tạo phần đầu cho bảng. Sau đó $ ("# table_of_items tr"). Remove (); hoạt động tốt cho bạn, vì nó chỉ loại bỏ các thẻ <tr>.
Kate

TTT vui lòng thêm comment của bạn vào câu trả lời. Câu trả lời của bạn là hoàn hảo!
Khorshid

57

Rất thô, nhưng điều này cũng hoạt động:

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

9
Thật không may, điều này không giữ các tiêu đề <th> như OP yêu cầu.
JoSeTe4ever

1
Nó sẽ xảy ra nếu họ đặt tiêu đề của họ <th> lồng vào một <thead>. Đây có lẽ là cách chính xác nhất về mặt cú pháp để xây dựng bảng.
Jon Black

Hoạt động tuyệt vời. Tôi nghĩ điều này chỉ phù hợp với những người như tôi, những người đã tạo tiêu đề bảng, hàng, ô, tbody mọi thứ trong JQuery.
Shamsul Arefin Sajib

Điều này làm việc tốt cho chỉ thanh toán bù trừ html bên trong một tbody :)
RudyOnRails

Tôi chỉ xóa cơ thể với một chút sửa đổi đối với điều này var bodyRef = document.getElementById('myTable').getElementsByTagName('tbody')[0]; bodyRef.innerHTML = '';
azyth

17

Đây là một câu hỏi cũ, tuy nhiên gần đây tôi đã gặp vấn đề tương tự.
Tôi đã viết mã này để giải quyết nó:

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

Điều đó sẽ xóa tất cả các hàng, ngoại trừ hàng đầu tiên.

Chúc mừng!


9
ngắn hơn (và nhanh hơn): var rowCount = myTable.rows.length; while (- rowCount) myTable.deleteRow (rowCount);
Petar

Mã trong nhận xét ở trên không xóa hàng đầu tiên
PrfctByDsgn

16

Những điểm cần lưu ý, trong phần Chú ý các lỗi thường gặp :

Nếu chỉ mục bắt đầu của bạn là 0 (hoặc một số chỉ mục từ đầu), thì mã chính xác là:

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

LƯU Ý

1. đối số cho deleteRow đã được sửa
điều này là bắt buộc vì khi chúng ta xóa một hàng, số lượng hàng sẽ giảm.
I E; vào thời điểm tôi đạt đến (row.length - 1), hoặc thậm chí trước khi hàng đó đã bị xóa, vì vậy bạn sẽ gặp một số lỗi / ngoại lệ (hoặc một lỗi im lặng).

2. rowCount được lấy trước khi vòng lặp for bắt đầu vì khi chúng ta xóa "table.rows.length" sẽ tiếp tục thay đổi, vì vậy một lần nữa bạn gặp một số vấn đề, rằng chỉ các hàng lẻ hoặc chẵn mới bị xóa.

Hy vọng rằng sẽ giúp.


10

Giả sử bạn chỉ có một bảng để bạn có thể tham khảo nó chỉ với kiểu. Nếu bạn không muốn xóa các tiêu đề:

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

nếu không thì:

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

hy vọng nó giúp!


7

Tôi cần xóa tất cả các hàng ngoại trừ giải pháp đầu tiên và giải pháp được đăng bởi @strat nhưng điều đó dẫn đến ngoại lệ không cần thiết (tham chiếu đến Node trong ngữ cảnh mà nó không tồn tại). Những điều sau đây đã làm việc cho tôi.

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

7

Nếu bạn có thể khai báo một IDcho tbodybạn có thể chỉ cần chạy hàm này:

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

5

điều này sẽ hoạt động xóa lặp lại trong bảng HTML ở dạng gốc

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

5

mã cho bên dưới hoạt động tuyệt vời. Nó loại bỏ tất cả các hàng ngoại trừ hàng tiêu đề. Vì vậy, mã này thực sự t

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

3
Chờ đã, đây là câu trả lời jQuery, câu hỏi ban đầu không hỏi cụ thể cho giải pháp jQuery!
mặc khải

4

Gán một số id cho thẻ tbody. I E . Sau đó, dòng sau sẽ giữ lại đầu trang / chân trang của bảng và xóa tất cả các hàng.

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

Và, nếu bạn muốn toàn bộ bảng (đầu trang / hàng / chân trang) bị xóa sạch, thì hãy đặt id ở cấp bảng tức là


3

Nếu bạn không muốn loại bỏ thvà chỉ muốn loại bỏ các hàng bên trong, điều này đang hoạt động hoàn hảo.

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

3

Còn cái này thì sao:

Khi trang tải lần đầu tiên, hãy làm như sau:

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

Sau đó, khi bạn muốn xóa bảng:

myTable.innerHTML=myTable.oldHTML;

Kết quả sẽ là (các) hàng tiêu đề của bạn nếu đó là tất cả những gì bạn bắt đầu, hiệu suất nhanh hơn đáng kể so với lặp lại.


giải pháp rất thanh lịch
mặc khải

2

Nếu bạn có ít <th>hàng hơn nhiều so với không phải <th>hàng, bạn có thể tập hợp tất cả các <th>hàng thành một chuỗi, xóa toàn bộ bảng rồi viết<table>thstring</table> vị trí của bảng trước đây.

CHỈNH SỬA: Trong đó, rõ ràng, "thstring" là html cho tất cả các hàng của <th>s.


1
Thay vào đó, hãy thu thập các <th>s dưới dạng phần tử DOM, xóa nộiHTML của bảng, sau đó nối các <th>s vào lại.
entonio

Hãy lưu ý, nếu bạn định thay thế clear tbody bằng cách sử dụng thuộc tính innerHTML, nó sẽ không hoạt động trong IE, tuy nhiên, có một cách giải quyết.
aziz punjani

2

Điều này hoạt động trong IE mà không cần phải khai báo var cho bảng và sẽ xóa tất cả các hàng:

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

1

đây là một mã đơn giản tôi vừa viết để giải quyết vấn đề này, mà không xóa hàng tiêu đề (đầu tiên).

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

Hi vọng nó sẽ giúp ích cho bạn!!.


1

Gán một id hoặc một lớp cho tbody của bạn.

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

Bạn có thể đặt tên id hoặc lớp của mình theo cách bạn muốn, không nhất thiết phải #tbodyIdhoặc .tbodyClass.


0

Chỉ cần Xóa nội dung bảng.

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

2
html () thực sự là một phương thức jQuery.
carlodurso

-1

const table = document.querySelector ('table'); table.innerHTML === ''? null: table.innerHTML = ''; javascript ở trên hoạt động tốt cho tôi. Nó kiểm tra xem bảng có chứa bất kỳ dữ liệu nào không và sau đó xóa mọi thứ kể cả tiêu đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.