Cách tốt nhất để loại bỏ một hàng bảng với jQuery là gì?


Câu trả lời:


434

Bạn đúng:

$('#myTableRow').remove();

Điều này hoạt động tốt nếu hàng của bạn có một id, chẳng hạn như:

<tr id="myTableRow"><td>blah</td></tr>

Nếu bạn không có id, bạn có thể sử dụng bất kỳ công cụ chọn nào của jQuery .


Vâng, tôi đã giả sử hàng có ID và bạn có ID :)
Darryl Hein

2
Làm theo cách này có nghĩa là bạn cần một id mỗi hàng có khả năng thêm nhiều chi phí. jQuery cho phép các cách tiếp cận khác mang tính thành ngữ hơn (theo cách tiếp cận của jQuery), tiếp tục đọc có nhiều gợi ý hơn.
Ian Lewis

Làm việc rất tốt cho tôi khi tôi có thể đặt id duy nhất vào mỗi hàng.
Jim Evans

2
Công cụ tuyệt vời! JQuery là tương lai!
heinkasner

1
"Jefe, một plethora là gì?"
Pete

110
$('#myTable tr').click(function(){
    $(this).remove();
    return false;
});

Thậm chí tốt hơn

$("#MyTable").on("click", "#DeleteButton", function() {
   $(this).closest("tr").remove();
});

4
Thật kỳ lạ, giải pháp của bạn là vô cùng tốt hơn so với giải pháp được chấp nhận.
Thư giãn tại Síp

3
@jorg, chỉ cần đề cập đến nó, bạn có một lỗi đánh máy trong câu trả lời của bạn, sau .click, bạn phải đặt hàm () gọi lại
Franco

7
cũng $ (này) .closest ('tr'). remove ();
LeRoy

61

Giả sử bạn có một nút / liên kết bên trong một ô dữ liệu trong bảng của mình, một cái gì đó như thế này sẽ thực hiện thủ thuật ...

$(".delete").live('click', function(event) {
    $(this).parent().parent().remove();
});

Điều này sẽ loại bỏ cha mẹ của cha mẹ của nút / liên kết được nhấp. Bạn cần sử dụng Parent () vì nó là đối tượng jQuery, không phải đối tượng DOM bình thường và bạn cần sử dụng Parent () hai lần, vì nút này nằm trong một ô dữ liệu, nằm trong một hàng .... đó là những gì bạn muốn loại bỏ. $ (đây) là nút được nhấp, vì vậy chỉ cần có một cái gì đó như thế này sẽ chỉ xóa nút:

$(this).remove();

Trong khi điều này sẽ loại bỏ ô dữ liệu:

    $(this).parent().remove();

Nếu bạn muốn chỉ cần nhấp vào bất cứ nơi nào trên hàng để loại bỏ nó, một cái gì đó như thế này sẽ hoạt động. Bạn có thể dễ dàng sửa đổi điều này để nhắc người dùng hoặc chỉ hoạt động khi nhấp đúp chuột:

$(".delete").live('click', function(event) {
    $(this).parent().remove();
});

Hy vọng điều đó sẽ giúp ... Tôi đã đấu tranh với điều này một chút bản thân mình.


25
Điều gì xảy ra nếu liên kết không trực tiếp bên trong td, nhưng có, nói, một khoảng xung quanh nó? Tôi nghĩ sẽ tốt hơn nếu làm $ (this) .parents ('tr'). Remove (); để cho nó tự đi lên cây DOM, tìm tr và xóa nó.
Paolo Bergantino

2
Điều đó cũng sẽ làm việc. Tất cả phụ thuộc vào vị trí trong DOM nút / liên kết của bạn, đó là lý do tại sao tôi đã đưa ra rất nhiều ví dụ và một lời giải thích dài như vậy.
điếm 30/03/2016

2
Bạn cũng có thể sử dụng $ (this) .parents ('tr')
centao

7
.live không được dùng nữa trong jQuery 1.7 và bị xóa trong 1.9. Xem jQuery.live

42

Bạn có thể dùng:

$($(this).closest("tr"))

để tìm hàng bảng cha của một phần tử.

Nó thanh lịch hơn cha mẹ (). Parent () là những gì tôi bắt đầu làm và sớm biết được lỗi của mình.

- Chỉnh sửa - Ai đó đã chỉ ra rằng câu hỏi là về việc xóa hàng ...

$($(this).closest("tr")).remove()

Như được chỉ ra dưới đây, bạn có thể chỉ cần làm:

$(this).closest('tr').remove();

Một đoạn mã tương tự có thể được sử dụng cho nhiều hoạt động như bắn các sự kiện trên nhiều yếu tố.


4
Một chút ngắn gọn hơn:$(this).closest("tr").remove()
Barry Kaye

15

Dễ dàng .. Hãy thử điều này

$("table td img.delete").click(function () {
    $(this).parent().parent().parent().fadeTo(400, 0, function () { 
        $(this).remove();
    });
    return false;
});

10
Tôi sẽ thay đổi $(this).parent().parent().parent()thành $(this).closest('tr'). Nó mạnh mẽ hơn và hiển thị rõ ràng những gì bạn đang chọn.
nickf

10

Là những điều sau đây được chấp nhận:

$('#myTableRow').remove();

8
function removeRow(row) {
    $(row).remove();
}

<tr onmousedown="removeRow(this)"><td>Foo</td></tr>

Có lẽ một cái gì đó như thế này cũng có thể làm việc? Tôi đã không thử làm một cái gì đó với "cái này", vì vậy tôi không biết nó có hoạt động hay không.


1
Chà, tôi sẽ nói rằng sẽ có một chút kỳ lạ khi hàng biến mất khi bạn nhấp vào nó. Hiện tại tôi có một liên kết trong hàng để xóa hàng.
Darryl Hein

8

Tất cả bạn phải làm là xóa <tr>thẻ hàng ( ) khỏi bảng của bạn. Ví dụ ở đây là mã để loại bỏ hàng cuối cùng khỏi bảng:

$('#myTable tr:last').remove();

* Mã ở trên được lấy từ bài viết Howto jQuery này .


7

thử cái này cho kích thước

$(this).parents('tr').first().remove();

danh sách đầy đủ:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
  <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
  <script type="text/javascript">
    $(document).ready(function() {
        $('.deleteRowButton').click(DeleteRow);
      });

    function DeleteRow()
    {
      $(this).parents('tr').first().remove();
    }
  </script>
</head>
<body>
  <table>
    <tr><td>foo</td>
     <td><a class="deleteRowButton">delete row</a></td></tr>
    <tr><td>bar bar</td>
     <td><a class="deleteRowButton">delete row</a></td></tr>
    <tr><td>bazmati</td>
     <td><a class="deleteRowButton">delete row</a></td></tr>
  </table>
</body>
</html>

nhìn thấy nó trong hành động


4

Một số khác bởi empty():

$(this).closest('tr').empty();

1
Điều đó không xóa tất cả <td> nhưng không phải <tr>? Tôi đoán trình duyệt có thể tự động xóa <tr>, nhưng tôi nghi ngờ điều đó không được đảm bảo.
Darryl Hein

2

Nếu hàng bạn muốn xóa có thể thay đổi, bạn có thể sử dụng hàng này. Chỉ cần vượt qua chức năng này hàng # bạn muốn xóa.

function removeMyRow(docRowCount){
   $('table tr').eq(docRowCount).remove();
}

1
$('tr').click(function()
 {
  $(this).remove();
 });

Tôi nghĩ rằng bạn sẽ thử mã ở trên, vì nó hoạt động, nhưng tôi không biết tại sao đôi khi nó hoạt động và sau đó toàn bộ bảng bị xóa. tôi cũng đang cố gắng loại bỏ hàng bằng cách nhấp vào hàng. nhưng không thể tìm thấy câu trả lời chính xác.


Tôi không chắc nếu bạn đã thử $ ('tr'). Live ("click", function () {$ (this) .remove ();});
gfivehost

1

nếu bạn có HTML như thế này

<tr>
 <td><span class="spanUser" userid="123"></span></td>
 <td><span class="spanUser" userid="123"></span></td>
</tr>

nơi userid="123"là một thuộc tính tùy chỉnh mà bạn có thể cư trú linh hoạt khi bạn xây dựng bảng,

bạn có thể sử dụng một cái gì đó như

  $(".spanUser").live("click", function () {

        var span = $(this);   
        var userid = $(this).attr('userid');

        var currentURL = window.location.protocol + '//' + window.location.host;
        var url = currentURL + "/Account/DeleteUser/" + userid;

        $.post(url, function (data) {
          if (data) {
                   var tdTAG = span.parent(); // GET PARENT OF SPAN TAG
                   var trTAG = tdTAG.parent(); // GET PARENT OF TD TAG
                   trTAG.remove(); // DELETE TR TAG == DELETE AN ENTIRE TABLE ROW 
             } else {
                alert('Sorry, there is some error.');
            }
        }); 

     });

Vì vậy, trong trường hợp đó bạn không biết lớp hoặc id của TRthẻ nhưng dù sao bạn cũng có thể xóa nó.


nghĩ rằng hiện đang bị phản đối vì ủng hộ, $ (". spanUser"). on ('click', function () {
Tofuwar chiến binh

1

Tôi đánh giá cao đây là một bài viết cũ, nhưng tôi đang tìm cách làm như vậy và thấy câu trả lời được chấp nhận không phù hợp với tôi. Giả sử JQuery đã chuyển từ khi nó được viết.

Dù sao, tôi tìm thấy những điều sau đây làm việc cho tôi:

$('#resultstbl tr[id=nameoftr]').remove();

Không chắc chắn nếu điều này giúp bất cứ ai. Ví dụ của tôi ở trên là một phần của hàm lớn hơn nên không bao bọc nó trong trình nghe sự kiện.


0

Nếu bạn đang sử dụng Bảng Bootstrap

thêm đoạn mã này vào bootstrap_table.js của bạn

BootstrapTable.prototype.removeRow = function (params) {
    if (!params.hasOwnProperty('index')) {
        return;
    }

    var len = this.options.data.length;

    if ((params.index > len) || (params.index < 0)){
        return;
    }

    this.options.data.splice(params.index, 1);

    if (len === this.options.data.length) {
        return;
    }

    this.initSearch();
    this.initPagination();
    this.initBody(true);
};

Sau đó trong của bạn var allowedMethods = [

thêm vào 'removeRow'

Cuối cùng bạn có thể sử dụng $("#your-table").bootstrapTable('removeRow',{index:1});

Tín dụng cho bài viết này


0

id không phải là một bộ chọn tốt bây giờ. Bạn có thể định nghĩa một số thuộc tính trên các hàng. Và bạn có thể sử dụng chúng như bộ chọn.

<tr category="petshop" type="fish"><td>little fish</td></tr>
<tr category="petshop" type="dog"><td>little dog</td></tr>
<tr category="toys" type="lego"><td>lego starwars</td></tr>

và bạn có thể sử dụng một func để chọn hàng như thế này (ES6):

const rowRemover = (category,type)=>{
   $(`tr[category=${category}][type=${type}]`).remove();
}

rowRemover('petshop','fish');

0

Phương pháp dễ nhất để xóa hàng khỏi bảng:

  1. Xóa hàng của bảng bằng ID duy nhất của nó.
  2. Xóa dựa trên thứ tự / chỉ mục của hàng đó. Vd: xóa hàng thứ ba hoặc thứ năm.

Ví dụ:

 <table id='myTable' border='1'>
    <tr id='tr1'><td>Row1</td></tr>
    <tr id='tr2'><td>Row2</td></tr>
    <tr id='tr3'><td>Row3</td></tr>
    <tr id='tr4'><td>Row4</td></tr>
    <tr id='tr5'><td>Row5</td></tr>
  </table>

//======REMOVE TABLE ROW=========
//1. remove spesific row using its ID
$('#tr1').remove();

//2. remove spesific row using its order or index.
//row index started from 0-n. Row1 index is 0, Row2 index is 1 and so on.
$('#myTable').find('tr:eq(2)').remove();//removing Row3
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.