jQuery xóa tất cả các hàng của bảng ngoại trừ đầu tiên


280

Sử dụng jQuery, làm cách nào để xóa tất cả các hàng trong một bảng trừ bảng đầu tiên? Đây là nỗ lực đầu tiên của tôi trong việc sử dụng bộ chọn chỉ mục. Nếu tôi hiểu các ví dụ chính xác, những điều sau đây sẽ hoạt động:

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

mà tôi sẽ đọc là "Gói một số bảng trong một đối tượng jQuery, sau đó xóa tất cả các phần tử 'tr' (hàng) trong đó chỉ số phần tử của các hàng đó lớn hơn 0". Trong thực tế, nó thực thi mà không tạo ra lỗi, nhưng không xóa bất kỳ hàng nào khỏi bảng.

Tôi còn thiếu gì, và làm cách nào để khắc phục điều này? Tất nhiên, tôi có thể sử dụng javascript trực tiếp, nhưng tôi có rất nhiều niềm vui với jQuery mà tôi muốn giải quyết vấn đề này bằng jQuery.


Bất cứ ai cũng biết tại sao mã đã cho không hoạt động? Tôi cũng gặp vấn đề khi đặt bộ chọn bộ lọc vào chức năng gỡ bỏ
Leto

1
Bây giờ tôi đã hiểu điều này tốt hơn, mã ở trên không hoạt động vì $ (một số bộ chọn bảng) chỉ chọn phần tử bảng, không phải bất kỳ phần tử con nào của nó, vì vậy không có phần tử 'tr' nào cho hàm loại bỏ để tìm. Sử dụng chức năng tìm kiếm tìm kiếm sự trùng khớp giữa các phần tử con của phần tử bảng.
Ken Paul

Nhìn vào câu trả lời này stackoverflow.com/questions/4831334/ từ
AuthorProxy

Câu trả lời:


521

Điều này sẽ làm việc:

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

2
Điều gì xảy ra nếu tôi muốn loại bỏ các hàng của bảng ngoại trừ thứ nhất và thứ hai?

18
@ user594166 sử dụng gt (1) thay vì gt (0).
christianvuerings

6
Từ trang web jQuery: 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. Tôi khuyên bạn nên sử dụng $ ("# mytable> tr"). Lát (1) .remove ();
Chris_F

mã của bạn không hoạt động với tôi .. tôi đã thay đổi gt (0) thành gt (1) và điều này đã hoạt động.
saadk

112

Tôi nghĩ rằng điều này dễ đọc hơn với mục đích:

$('someTableSelector').children( 'tr:not(:first)' ).remove();

Sử dụng trẻ em cũng quan tâm đến trường hợp hàng đầu tiên chứa một bảng bằng cách giới hạn độ sâu của tìm kiếm.

Nếu bạn có yếu tố TBODY, bạn có thể làm điều này:

$("someTableSelector > tbody:last").children().remove();

Nếu bạn có các yếu tố THEAD hoặc TFOOT, bạn sẽ cần phải làm một cái gì đó khác biệt.


2
re: làm điều gì đó khác biệt .... điều này hoạt động:$('someTableSelector > tbody:last > tr:not(:first)').remove();
Cheeso

để loại bỏ tất cả trẻ em tôi đã phải sử dụng dấu ngoặc kép. Không nhận ra nó khác. $("#tasks").children().remove();
Doomsknight

39

Một cách khác để thực hiện điều này là sử dụng hàm rỗng () của jQuery với các phần tử thead và tbody trong bảng của bạn.

Ví dụ về bảng:

<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>

Và lệnh jQuery:

$("#tableId > tbody").empty();

Điều này sẽ loại bỏ tất cả các hàng có trong phần tử tbody của bảng của bạn và giữ phần tử thead nơi tiêu đề của bạn phải ở. Nó có thể hữu ích khi bạn chỉ muốn làm mới nội dung của bảng.


3
Điều này có lẽ sẽ có hiệu suất tốt nhất trong tất cả các giải pháp được cung cấp, và rất thanh lịch.
the.jxc

37

Nếu là tôi, có lẽ tôi sẽ chuyển nó xuống một bộ chọn duy nhất:

$('someTableSelector tr:not(:first)').remove();

Đồng ý, nhưng cụ thể hơn nó phải nói: $ ('someTableSelector tbody tr: not (: first)'). Remove ();
Marco Muciño

29

Bộ chọn của bạn không cần phải ở trong phần gỡ bỏ của bạn.

Nó sẽ trông giống như:

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

Có nghĩa là chọn mọi hàng trừ hàng đầu tiên trong bảng có ID của bảngID và xóa chúng khỏi DOM.


Tôi đồng ý. Trong trường hợp của tôi, đối tượng bảng đã được chọn trước đó.
Ken Paul

Để xóa tất cả các hàng ngoại trừ hàng đầu tiên: - $ ("# tableID tr: gt (1)"). Remove ();
Biki

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

Tôi nhớ rằng đi ngang qua 'lát cắt' nhanh hơn tất cả các phương pháp khác, vì vậy chỉ cần đặt nó ở đây.


Một số nó không làm việc cho tôi. Các câu trả lời được chấp nhận dường như làm các mẹo.
ankush981

gtkhông được chấp nhận, đây là câu trả lời tốt nhất.
CyberEd

6

Hãy xem xét một bảng có id tbl: mã jQuery sẽ là:

$('#tbl tr:not(:first)').remove();

2

Để xóa tất cả các hàng, ngoại trừ hàng đầu tiên (ngoại trừ tiêu đề), hãy sử dụng mã dưới đây:

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


1

Cách dễ nhất:

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

-first tham khảo bảng
-get danh sách các phần tử và cắt nó và loại bỏ các phần tử được chọn của danh sách


0

-Xin lỗi này là trả lời rất muộn.

Cách dễ nhất tôi đã tìm thấy để xóa bất kỳ hàng nào (và tất cả các hàng khác thông qua việc lặp lại) là cách này

$ ('# rowid', '# tableid'). remove ();

Phần còn lại là dễ dàng.



0

bọc trong một chức năng:

function remove_rows(tablename) { 
    $(tablename).find("tr:gt(0)").remove();        
}

sau đó gọi nó:

remove_rows('#table1');
remove_rows('#table2');

0

Điều này hoạt động hoàn hảo

$("#myTable tbody").children( 'tr:not(:first)' ).html("");

Vâng, điều đó đã được đăng nhiều lần trước đây. Bất cứ điều gì mới?
Nico Haase

0

Điều này làm việc theo cách sau trong trường hợp của tôi và làm việc tốt

$("#compositeTable").find("tr:gt(1)").remove();
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.