ลบแถวทั้งหมดในตาราง HTML


104

ฉันจะลบแถวทั้งหมดของตาราง HTML ได้อย่างไรยกเว้นไฟล์ <th>ใช้ Javascript และไม่ต้องวนซ้ำแถวทั้งหมดในตาราง ฉันมีตารางขนาดใหญ่มากและฉันไม่ต้องการหยุด UI ในขณะที่ฉันวนรอบแถวเพื่อลบออก


2
ต้องมีการวนซ้ำไม่มีคำสั่ง "ลบหลายองค์ประกอบ" วิธีนี้removeChildใช้องค์ประกอบ DOM เพียงองค์ประกอบเดียว
Šime Vidas

@SLaks สมมติว่าเขาหมายถึงแถวที่มีแถวส่วนหัว
Eonasdan

คำตอบ:


94

เก็บ<th>แถวไว้ในแถว<thead>และอีกแถวหนึ่ง<tbody>จากนั้นแทนที่<tbody>ด้วยใหม่ที่ว่างเปล่า

กล่าวคือ

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

โซลูชันที่มีประสิทธิภาพสูงสุดได้อย่างง่ายดายโดยแน่นอนว่านักพัฒนา JavaScript ได้รับอนุญาตให้แก้ไข HTML
Blazemonger

1
ระวังถ้าคุณจะแทนที่ tbody โดยใช้คุณสมบัติ innerHTML มันจะไม่ทำงานใน IE แต่ก็มีวิธีแก้ปัญหา
aziz punjani

2
@Eonasdan - เป็นเรื่องส่วนตัว มีห้องสมุดมากมายอยู่ที่นั่น (ความชอบส่วนตัวของฉันคือการใช้ YUI 3 วันนี้) หากคนที่มีปัญหานี้ต้องการแก้ปัญหานี้ด้วยหนึ่งในนั้น หลักการจะเหมือนกันไม่ว่าคุณจะรวมโค้ดของบุคคลที่สามจำนวนมากก็ตาม
Quentin

5
เนโครแมนdocument.getElementById('tbody').innerHTML = '';
ซิ่ง

2
@ Trees4theForest นี่ใช้ได้ดีสำหรับฉัน ไม่น่าจะเป็นไปได้ในช่วง OP
Mabu

98

สิ่งนี้จะลบแถวทั้งหมด:

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

46
หากคุณไม่ต้องการลบส่วนหัว: $ ("# table_of_items tbody tr"). remove ();
ท.ท.

1
คำตอบง่ายๆที่ดีมาก ฉันใช้ใน CoffeeScript ของฉัน - ฉันชอบโซลูชันแบบบรรทัดเดียว$("tbody#id tr").remove()
n2o

ฉันคิดว่านี่เป็นคำตอบที่ดีกว่าคำตอบที่ยอมรับแม้ว่าจะขึ้นอยู่กับว่าคุณต้องการใช้ JQuery หรือไม่ก็ตาม แต่อย่างไรก็ตาม. remove ไม่ทำงานบน Chrome
Milind Thakkar

TTT ใช้แท็ก <thead><th></th> </thead> เพื่อสร้างส่วนหัวสำหรับตาราง จากนั้น $ ("# table_of_items tr") ลบ (); ทำงานได้ดีสำหรับคุณเพราะจะลบเฉพาะแท็ก <tr>
Kate

TTT โปรดเพิ่มความคิดเห็นของคุณในคำตอบ คำตอบของคุณสมบูรณ์แบบ!
Khorshid

62

หยาบมาก แต่ก็ใช้ได้เช่นกัน:

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

10
น่าเสียดายที่สิ่งนี้ไม่ได้เก็บส่วนหัว <th> ตามที่ OP ขอ
JoSeTe4ever

2
จะเป็นเช่นนั้นหากพวกเขาวางส่วนหัวที่<th> ซ้อนกันในไฟล์<thead>. นี่อาจเป็นวิธีที่ถูกต้องที่สุดในการสร้างตารางอย่างไรก็ตาม
Jon Black

ใช้งานได้ดี ฉันคิดว่าสิ่งนี้เหมาะสำหรับคนอย่างฉันเท่านั้นที่สร้างส่วนหัวของตารางแถวเซลล์ทำทุกอย่างใน JQuery
Shamsul Arefin Sajib

สิ่งนี้ใช้ได้ดีสำหรับการล้าง html ภายใน tbody :)
RudyOnRails

ฉันล้างร่างกายด้วยการปรับเปลี่ยนเล็กน้อย var bodyRef = document.getElementById('myTable').getElementsByTagName('tbody')[0]; bodyRef.innerHTML = '';
azyth

23

สิ่งที่ควรทราบเกี่ยวกับระวังข้อผิดพลาดทั่วไป :

หากดัชนีเริ่มต้นของคุณเป็น 0 (หรือดัชนีจากจุดเริ่มต้น) รหัสที่ถูกต้องคือ:

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

หมายเหตุ

1. อาร์กิวเมนต์สำหรับ deleteRow ได้รับการแก้ไข
สิ่งนี้จำเป็นเนื่องจากเมื่อเราลบแถวจำนวนแถวจะลดลง
ได้แก่ ; เมื่อถึงเวลาที่ฉันไปถึง (rows.length - 1) หรือก่อนที่แถวนั้นจะถูกลบไปแล้วดังนั้นคุณจะมีข้อผิดพลาด / ข้อยกเว้นบางอย่าง (หรือไม่มีเสียง)

2. rowCount ถูกนำมาก่อนที่ for loop จะเริ่มขึ้น เนื่องจากเมื่อเราลบ "table.rows.length" จะยังคงเปลี่ยนแปลงอยู่ดังนั้นคุณมีปัญหาอีกครั้งที่จะลบเฉพาะแถวคี่หรือคู่เท่านั้น

หวังว่าจะช่วยได้


17

นี่เป็นคำถามเก่า แต่เมื่อเร็ว ๆ นี้ฉันมีปัญหาที่คล้ายกัน
ฉันเขียนรหัสนี้เพื่อแก้ปัญหา:

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

ซึ่งจะลบแถวทั้งหมดยกเว้นแถวแรก

ไชโย!


10
สั้นกว่า (และเร็วกว่า): var rowCount = myTable.rows.length; ในขณะที่ (- rowCount) myTable.deleteRow (rowCount);
Petar

รหัสในความคิดเห็นด้านบนไม่ได้ลบแถวแรก
PrfctByDsgn

10

สมมติว่าคุณมีตารางเพียงตารางเดียวเพื่อให้คุณสามารถอ้างอิงได้ด้วยประเภทเท่านั้น หากคุณไม่ต้องการลบส่วนหัว:

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

มิฉะนั้น:

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

หวังว่ามันจะช่วยได้!


8

หากคุณสามารถประกาศIDสำหรับtbodyคุณสามารถเรียกใช้ฟังก์ชันนี้ได้:

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

7

ฉันต้องการลบแถวทั้งหมดยกเว้นแถวแรกและโซลูชันที่โพสต์โดย @strat แต่นั่นส่งผลให้เกิดข้อยกเว้นที่ไม่ถูกตรวจจับ (การอ้างอิงโหนดในบริบทที่ไม่มีอยู่) สิ่งต่อไปนี้ใช้ได้ผลสำหรับฉัน

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

6

รหัสให้ด้านล่างใช้งานได้ดี จะลบแถวทั้งหมดยกเว้นแถวส่วนหัว ดังนั้นโค้ดนี้ t จริงๆ

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

4
เดี๋ยวก่อนนี่คือคำตอบ jQuery คำถามเดิมไม่ได้ถามเฉพาะสำหรับโซลูชัน jQuery!
เปิดเผย

5

สิ่งนี้จะใช้การลบการวนซ้ำในตาราง HTML ในเนทีฟ

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

3

หากคุณไม่ต้องการลบthและเพียงแค่ต้องการลบแถวด้านในการดำเนินการนี้จะทำงานได้อย่างสมบูรณ์

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

3

แล้วสิ่งนี้ล่ะ:

เมื่อหน้าเว็บโหลดครั้งแรกให้ดำเนินการดังนี้:

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

จากนั้นเมื่อคุณต้องการล้างตาราง:

myTable.innerHTML=myTable.oldHTML;

ผลลัพธ์จะเป็นแถวส่วนหัวของคุณหากนั่นคือทั้งหมดที่คุณเริ่มต้นประสิทธิภาพจะเร็วกว่าการวนซ้ำอย่างมาก


โซลูชันที่สวยงามมาก
เปิดเผย

3

การกำหนด id ให้กับแท็ก tbody กล่าวคือ. หลังจากนี้บรรทัดต่อไปนี้ควรเก็บส่วนหัว / ส่วนท้ายของตารางไว้และลบแถวทั้งหมดออก

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

และถ้าคุณต้องการให้ทั้งตาราง (ส่วนหัว / แถว / ส่วนท้าย) ลบออกให้ตั้งค่า id ที่ระดับตารางเช่น


2

หากคุณมี<th>แถวน้อยกว่าแถวที่ไม่ใช่<th>มากคุณสามารถรวบรวม<th>แถวทั้งหมดเป็นสตริงลบตารางทั้งหมดแล้วเขียน<table>thstring</table>ตำแหน่งของตาราง

แก้ไข: โดยที่ชัดเจน "thstring" คือ html สำหรับแถวทั้งหมดของ<th>s


1
แต่รวบรวม<th>s เป็นองค์ประกอบ DOM ล้าง innerHTML ของตารางจากนั้นต่อท้าย<th>s อีกครั้ง
entonio

ระวังถ้าคุณจะแทนที่ clear tbody โดยใช้คุณสมบัติ innerHTML มันจะไม่ทำงานใน IE แต่ก็มีวิธีแก้ปัญหา
aziz punjani


2

กำหนดรหัสหรือชั้นเรียนให้กับคนของคุณ

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

คุณสามารถตั้งชื่อ ID หรือระดับของคุณวิธีที่คุณต้องการไม่จำเป็นต้องหรือ#tbodyId.tbodyClass


1

นี่เป็นรหัสง่ายๆที่ฉันเพิ่งเขียนเพื่อแก้ปัญหานี้โดยไม่ต้องลบแถวส่วนหัว (อันแรก)

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

หวังว่าจะเหมาะกับคุณ !!.



-1

const table = document.querySelector ('ตาราง'); table.innerHTML === ''? null: table.innerHTML = ''; จาวาสคริปต์ข้างต้นใช้งานได้ดีสำหรับฉัน ตรวจสอบเพื่อดูว่าตารางมีข้อมูลหรือไม่จากนั้นล้างข้อมูลทั้งหมดรวมทั้งส่วนหัวด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.