Bir HTML tablosundaki tüm satırları sil


104

Bir HTML tablosunun <th>Javascript kullananlar dışındaki tüm satırlarını ve tablodaki tüm satırlar arasında döngü oluşturmadan nasıl silebilirim ? Çok büyük bir tablom var ve onları silmek için satırlar arasında dolaşırken kullanıcı arayüzünü dondurmak istemiyorum


2
Bir döngü olması gerekir, "birden çok öğeyi sil" komutu yoktur, yöntem removeChildyalnızca tek bir DOM öğesini alır.
Šime Vidas

@SLaks, başlık satırlarını içeren satırı kastettiğini varsayarak
Eonasdan

Yanıtlar:


94

<th>Satırı a'da <thead>ve diğer satırları a'da tutun ve <tbody>ardından <tbody>yeni, boş bir satırla değiştirin .

yani

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

Elbette JavaScript geliştiricisinin HTML'yi değiştirmesine izin verilmesi koşuluyla, en verimli çözüm.
Blazemonger

1
Dikkat edin, içHTML özelliğini kullanarak tbody'yi değiştirecekseniz, IE'de çalışmaz, yine de bir çözüm var.
aziz punjani

2
@Eonasdan - Bu biraz öznel. Dışarıda çok sayıda kütüphane var (bu günlerde kişisel tercihim YUI 3 kullanmaktır), bu problemi olan biri bu problemi bunlardan biriyle çözmek isterse. Hangi büyük üçüncü taraf kodunu dahil etmek isterseniz isteyin, prensipler aynı olacaktır.
Quentin

3
Bunu document.getElementById('tbody').innerHTML = '';
büyülüyor

2
@ Trees4theForest Bu benim için iyi çalışıyor. Muhtemelen OP zamanında bu mümkün değildi.
Mabu

98

bu, tüm satırları kaldıracaktır:

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

45
Başlığı silmek istemiyorsanız: $ ("# table_of_items tbody tr"). Remove ();
TTT

1
Çok güzel, basit cevap. Benim CoffeeScript kullanılan - I tek satırlık-çözümlerin gibi$("tbody#id tr").remove()
n2o

Sanırım bu, JQuery'yi kullanmak isteyip istemediğinize bağlı olsa da, kabul edilen yanıttan daha iyi bir cevap. Ama bir şekilde .remove Chrome'da çalışmadı.
Milind Thakkar

TTT, tablo için başlık oluşturmak için <thead><th></th> </thead> etiketlerini kullanın. Sonra $ ("# table_of_items tr"). Remove (); yalnızca <tr> etiketlerini kaldırdığı için sizin için iyi çalışır.
Kate

TTT, lütfen cevaba yorumunuzu ekleyin. Cevabınız mükemmel!
Khorshid

61

Çok kaba ama bu da işe yarıyor:

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

10
Ne yazık ki bu, OP'nin sorduğu gibi <th> başlıklarını tutmuyor.
JoSeTe4ever

2
Başlıklarını <th> bir <thead>. Zaten tabloyu oluşturmanın muhtemelen sözdizimsel olarak en doğru yolu budur.
Jon Black

Harika çalışıyor. Bunun sadece benim gibi JQuery'deki her şeyi tablo başlığı, satır, hücre, tbody oluşturmuş kişiler için uygun olduğunu düşünüyorum.
Shamsul arefin Sajib

Bu sadece bir
tbody

Sadece cesedi buna ufak bir değişiklikle temizledim var bodyRef = document.getElementById('myTable').getElementsByTagName('tbody')[0]; bodyRef.innerHTML = '';
azyth

22

Dikkat edilmesi gereken noktalar, Sık yapılan hatalara dikkat edin :

Başlangıç ​​dizininiz 0 ise (veya başlangıçtan itibaren bir dizin), o zaman doğru kod:

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

NOTLAR

1. deleteRow argümanı düzeltildi,
bu gereklidir çünkü bir satırı sildikçe satır sayısı azalır.
yani; (rows.length - 1) 'e ulaştığında veya hatta bu satır silinmeden önce, bazı hatalar / istisnalar (veya sessiz bir hata) olacaktır.

2. rowCount, for döngüsü başlamadan önce alınır, çünkü biz "table.rows.length" i sildiğimiz için değişmeye devam edeceğiz, bu nedenle yine, yalnızca tek veya çift satırların silinmesi gibi bir sorununuz var.

Umarım yardımcı olur.


17

Bu eski bir soru, ancak son zamanlarda benzer bir sorunla karşılaştım.
Bu kodu çözmek için yazdım:

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

Bu, ilki hariç tüm satırları kaldıracaktır.

Şerefe!


10
daha kısa (ve daha hızlı): var rowCount = myTable.rows.length; while (- rowCount) myTable.deleteRow (rowCount);
Petar

Yukarıdaki açıklamadaki kod ilk satırı
kaldırmıyor

10

Sadece bir tablonuz olduğunu varsayarsak, sadece türle başvurabilirsiniz. Başlıkları silmek istemiyorsanız:

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

aksi takdirde:

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

Umarım yardımcı olur!


8

Bir IDfor ilan tbodyedebiliyorsanız, bu işlevi çalıştırabilirsiniz:

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

7

@Strat tarafından gönderilen ilk çözüm ve çözüm dışındaki tüm satırları silmem gerekiyordu, ancak bu yakalanmamış bir istisnayla sonuçlandı (mevcut olmadığı bağlamda Düğüme başvurmak). Aşağıdakiler benim için çalıştı.

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

5

bu, yerelde HTML tablosunda yineleme silme işleminde çalışır

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

5

Aşağıdaki kod harika çalışıyor. Başlık satırı dışındaki tüm satırları kaldırır. Yani bu kod gerçekten t

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

3
bekleyin, bu jQuery cevabı, orijinal soru özellikle jQuery çözümü için sormadı!
2019'u

3

Kaldırmak istemiyor thve sadece içindeki sıraları çıkarmak istiyorsanız, bu mükemmel çalışıyor.

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

3

Buna ne dersin:

Sayfa ilk yüklendiğinde şunu yapın:

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

Ardından tabloyu temizlemek istediğinizde:

myTable.innerHTML=myTable.oldHTML;

Sonuç olarak, başladığınız tek şey buysa, performans döngüden önemli ölçüde daha hızlıdır.


çok zarif çözüm
2019

3

Tbody etiketine bir kimlik atama. yani. Bundan sonra, aşağıdaki satır tablo üstbilgisini / altbilgisini korumalı ve tüm satırları kaldırmalıdır.

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

Ve tüm tablonun (üstbilgi / satırlar / altbilgi) silinmesini istiyorsanız, kimliği tablo düzeyinde ayarlayın, yani


2

<th>Satır olmayanlardan çok daha az satırınız <th>varsa, tüm <th>satırları bir dizede toplayabilir , tüm tabloyu kaldırabilir ve ardından <table>thstring</table>tablonun olduğu yere yazabilirsiniz .

DÜZENLEME: Açıkçası, "thstring" tüm <th>s satırları için html'dir .


1
Bunun yerine, <th>URL'leri DOM öğeleri olarak toplayın, tablonun iç HTML'sini temizleyin ve ardından URL'leri <th>tekrar tabloya ekleyin .
entonio

Dikkat edin, eğer clear tbody'yi innerHTML özelliğini kullanarak değiştirecekseniz, IE'de çalışmaz, yine de bir çözüm var.
aziz punjani

2

Bu, tablo için bir değişken bildirmek zorunda kalmadan IE'de çalışır ve tüm satırları siler:

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

2

Vücudunuz için bir kimlik veya sınıf atayın.

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

Kimliğinizi veya sınıfınızı istediğiniz gibi adlandırabilirsiniz, ille de #tbodyIdveya değil .tbodyClass.


1

bu, başlık satırını (ilki) kaldırmadan bunu çözmek için yazdığım basit bir kod.

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

Umarım sizin için çalışır !!


0

Masa gövdesini temizleyin.

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

2
html () aslında bir jQuery yöntemidir.
carlodurso

-1

const table = document.querySelector ('tablo'); table.innerHTML === ''? null: table.innerHTML = ''; yukarıdaki javascript benim için iyi çalıştı. Tablonun herhangi bir veri içerip içermediğini kontrol eder ve ardından başlık dahil her şeyi temizler.

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.