jQuery ilk hariç tüm tablo satırlarını sil


280

JQuery kullanarak, bir tablodaki ilk satır dışındaki tüm satırları nasıl silebilirim? Bu, dizin seçicileri kullanmaya yönelik ilk denemem. Örnekleri doğru anlarsam, aşağıdakilerin çalışması gerekir:

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

"Ben bir jQuery nesnesinde bazı tablo sarın, sonra bu tür satırların öğe dizini sıfırdan büyük olan tüm 'tr' öğeleri (satır) kaldırmak olarak okudum. Gerçekte, hata oluşturmadan yürütülür, ancak tablodan herhangi bir satır kaldırmaz.

Neyi kaçırıyorum ve bunu nasıl düzeltirim? Tabii ki, düz javascript kullanabilirsiniz, ama ben jQuery ile çok eğleniyorum jQuery kullanarak bu çözmek istiyorum.


Verilen kodun neden çalışmadığını bilen var mı? Filtre seçiciyi kaldırma işlevine sokarken de sorun yaşıyorum
Leto

1
Şimdi bunu daha iyi anladığım için, yukarıdaki kod çalışmaz, çünkü $ (bazı tablo seçici) yalnızca tablo öğesini seçer, alt öğelerinden herhangi birini seçmez, bu nedenle kaldırma işlevinin bulması için 'tr' öğeleri yoktur. Find işlevini kullanarak tablo öğesinin alt öğeleri arasındaki eşleşmeleri arar.
Ken Paul

Yanıtlar:


522

Bu çalışmalı:

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

2
İlk ve seconde dışındaki tablo satırlarını kaldırmak istersem ne olur?

18
@ user594166 gt (0) yerine gt (1) kullanın.
christianvuerings

6
JQuery web sitesinden: 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. $ ("# mytable> tr"). Tavsiye dilim (1) .remove ();
Chris_F

kodunu benim için çalışmadı .. Ben gt (0) gt (1) değiştirdi ve bu çalıştı.
saadk

113

Niyet göz önüne alındığında bu daha okunabilir olduğunu düşünüyorum:

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

Çocukların kullanılması, aramanın derinliğini sınırlandırarak ilk satırın bir tablo içerdiği durumla da ilgilenir.

Bir TBODY öğeniz varsa, bunu yapabilirsiniz:

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

THEAD veya TFOOT öğeleriniz varsa farklı bir şey yapmanız gerekir.


2
re: farklı bir şey yapmak .... bu çalışıyor:$('someTableSelector > tbody:last > tr:not(:first)').remove();
Cheeso

tüm çocukları kaldırmak için çift tırnak kullanmak zorunda kaldım. Başka türlü tanımıyordu. $("#tasks").children().remove();
Doomsknight

40

Bunu yapmanın başka bir yolu, jQuery'nin boş () işlevini tablonuzdaki thead ve tbody öğeleriyle kullanmaktır.

Tablo örneği:

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

Ve jQuery komutu:

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

Bu, tablonuzun tbody öğesinde bulunan tüm satırları kaldırır ve thead öğesini başlığınızın olması gereken yerde tutar. Yalnızca bir tablonun içeriğini yenilemek istediğinizde yararlı olabilir.


3
Bu muhtemelen sunulan tüm çözümlerin en iyi performansına sahip olacak ve çok zarif.
the.jxc

38

Eğer ben olsaydım, muhtemelen tek bir seçiciye kaynatardım:

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

Kabul et, ancak daha spesifik olmalı: $ ('someTableSelector tbody tr: not (: first)'). Remove ();
Marco Muciño

30

Seçicinizin kaldırmanızın içinde olması gerekmez.

Şöyle bir şey olmalı:

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

Bu, tableID kimliğine sahip tablodaki ilk satır dışındaki her satırı seçip DOM'dan kaldırmak anlamına gelir.


Katılıyorum. Benim durumumda, tablo nesnesi önceden seçilmişti.
Ken Paul

Birincisi dışındaki tüm satırları kaldırmak için: - $ ("# tableID tr: gt (1)"). Remove ();
Biki

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

Bu 'dilim' ile karşılaşmanın diğer tüm yaklaşımlardan daha hızlı olduğunu hatırlıyorum, o yüzden buraya koyuyorum.


Bazıları benim için işe yaramadı. Kabul edilen cevap hile yapıyor gibi görünüyor.
ankush981

gtkullanımdan kaldırılmıştır, bu en iyi yanıttır.
CyberEd

7

Kimliğine sahip bir tablo düşünün tbl: jQuery kodu:

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

3

İlk satır hariç (başlık hariç) tüm satırları kaldırmak için aşağıdaki kodu kullanın:

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


1

En kolay yol :

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

- ilk tabloya bakın -
elemanların listesini alın ve dilimleyin ve listenin seçilen elemanlarını kaldırın


0

- Üzgünüm, bu çok geç cevap.

Herhangi bir satırı (ve yineleme yoluyla diğer tüm satırları) silmek için bulduğum en kolay yolu budur

$ ( '# TableId' '# rowid') kaldırmayı ().;

Gerisi kolay.


0
$ ("# p-items"). find ('tr.row-items') .remove ();

0

bir fonksiyona sarılmış:

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

sonra ara:

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

0

Mükemmel çalışıyor

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

Evet, daha önce defalarca yayınlanmıştı. Yeni bir şey?
Nico Haase

0

Bu benim durumumda aşağıdaki şekilde çalıştı ve iyi çalışıyor

$("#compositeTable").find("tr:gt(1)").remove();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.