2010-12-28 38 views
5

Tôi có một bảng và không thể thay đổi đánh dấu:jQuery xóa bảng cột

<table> 
    <thead> 
     <tr> 
      <th> 
       blablabla 
      </th> 
      <th> 
       blablabla 
      </th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td> 
       efgd 
      </td> 
      <td> 
       efghdh 
      </td> 
     </tr> 
    </tbody> 
</table> 

Đây là chức năng của tôi, mà nên xóa một cột. Nó được gọi trên ô nhấp chuột:

function (menuItem, menu) { 
    var colnum = $(this).prevAll("td").length; 

    $(this).closest('table').find('thead tr th:eq('+colnum+')').remove(); 
    $(this).closest("table").find('tbody tr td:eq('+colnum+')').remove();  
    return; 
} 

Nhưng nó sẽ xóa nội dung khác, không phải cột tôi muốn xóa. Tôi đang ở đâu?

+0

Tôi không thể thấy ý định của bạn ở đây, vui lòng cung cấp thêm thông số ific. Bạn muốn xóa tất cả hoặc chỉ các cột cụ thể? –

Trả lời

12

Cột chỉ là nhiều ô, vì vậy bạn sẽ cần phải lặp qua tất cả các hàng theo cách thủ công và xóa chỉ mục theo ô.

này sẽ cho bạn một điểm khởi đầu tốt để loại bỏ các cột thứ 3:

$("tr").each(function() { 
    $(this).filter("td:eq(2)").remove(); 
}); 
+0

Điều này không hoạt động. 'filter()' được áp dụng cho các phần tử 'tr', không phải là các phần tử' td', do đó, điều này không loại bỏ bất cứ điều gì. Thay vào đó bạn cần phải làm '$ (this) .children(). Filter()' hoặc '$ (this) .find()'. – Mike

7

này sử dụng .delegate() cho xử lý, và một cách tiếp cận tự nhiên hơn bằng cách sử cellIndex để có được chỉ số tế bào mà được nhấp, và cells để kéo ô từ mỗi hàng.

Ví dụ:http://jsfiddle.net/zZDKg/1/

$('table').delegate('td,th', 'click', function() { 
    var index = this.cellIndex; 
    $(this).closest('table').find('tr').each(function() { 
     this.removeChild(this.cells[ index ]); 
    }); 
}); 
5

này hoạt động tốt đối với tôi:

$(".tableClassName tbody tr").each(function() { 
    $(this).find("td:eq(3)").remove(); 
}); 
0

Tháo cột đầu tiên từ mỗi hàng.

$('.mytable').find("tr td:nth-child(1)").each(function(){ 
    $(this).remove() 
}); 
1

Nếu bạn có html tĩnh (xem xét bảng với 10 cột),

sau đó loại bỏ cột đầu tiên cùng với tiêu đề sử dụng dưới đây:

$('#table th:nth-child(1),#table td:nth-child(1)').remove(); 

tại bảng mới sẽ có 9 cột, bây giờ bạn có thể xóa bất kỳ cột nào bằng cách sử dụng số:

$('#table th:nth-child(7),#table td:nth-child(7)').remove();