Delete all rows in an HTML table

JavascriptHtmlHtml Table

Javascript Problem Overview


How can I delete all rows of an HTML table except the <th>'s using Javascript, and without looping through all the rows in the table? I have a very huge table and I don't want to freeze the UI while I'm looping through the rows to delete them

Javascript Solutions


Solution 1 - Javascript

this will remove all the rows:

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

Solution 2 - Javascript

Keep the <th> row in a <thead> and the other rows in a <tbody> then replace the <tbody> with a new, empty one.

i.e.

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

Solution 3 - Javascript

Very crude, but this also works:

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

Solution 4 - Javascript

Points to note, on the Watch out for common mistakes:

If your start index is 0 (or some index from begin), then, the correct code is:

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

NOTES

1. the argument for deleteRow is fixed
this is required since as we delete a row, the number of rows decrease.
i.e; by the time i reaches (rows.length - 1), or even before that row is already deleted, so you will have some error/exception (or a silent one).

2. the rowCount is taken before the for loop starts since as we delete the "table.rows.length" will keep on changing, so again you have some issue, that only odd or even rows only gets deleted.

Hope that helps.

Solution 5 - Javascript

This is an old question, however I recently had a similar issue.
I wrote this code to solve it:

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

That will remove all rows, except the first.

Cheers!

Solution 6 - Javascript

Assuming you have just one table so you can reference it with just the type. If you don't want to delete the headers:

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

otherwise:

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

hope it helps!

Solution 7 - Javascript

If you can declare an ID for tbody you can simply run this function:

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

Solution 8 - Javascript

the give below code works great. It removes all rows except header row. So this code really t

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

Solution 9 - Javascript

I needed to delete all rows except the first and solution posted by @strat but that resulted in uncaught exception (referencing Node in context where it does not exist). The following worked for me.

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

Solution 10 - Javascript

this would work iteration deletetion in HTML table in native

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

Solution 11 - Javascript

Assing some id to tbody tag. i.e. . After this, the following line should retain the table header/footer and remove all the rows.

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

And, if you want the entire table (header/rows/footer) to wipe out, then set the id at table level i.e.

Solution 12 - Javascript

How about this:

When the page first loads, do this:

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

Then when you want to clear the table:

myTable.innerHTML=myTable.oldHTML;

The result will be your header row(s) if that's all you started with, the performance is dramatically faster than looping.

Solution 13 - Javascript

If you do not want to remove th and just want to remove the rows inside, this is working perfectly.

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

Solution 14 - Javascript

If you have far fewer <th> rows than non-<th> rows, you could collect all the <th> rows into a string, remove the entire table, and then write <table>thstring</table> where the table used to be.

EDIT: Where, obviously, "thstring" is the html for all of the rows of <th>s.

Solution 15 - Javascript

This works in IE without even having to declare a var for the table and will delete all rows:

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

Solution 16 - Javascript

Assign an id or a class for your tbody.

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

You can name your id or class how you want, not necessarily #tbodyId or .tbodyClass.

Solution 17 - Javascript

this is a simple code I just wrote to solve this, without removing the header row (first one).

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

Hope it works for you!!.

Solution 18 - Javascript

@lkan's answer worked for me, however to leave the first row, change

from

for (var x=rowCount-1; x>0; x--)

to

for (var x=rowCount-1; x>1; x--)

Full code:

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

Solution 19 - Javascript

Pure javascript, no loops and preserving headers:

function restartTable(){

const tbody = document.getElementById("tblDetail").getElementsByTagName('tbody')[0];
    tbody.innerHTML = "";

}

<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"/>

 <table id="tblDetail" class="table table-bordered table-hover table-ligth table-sm table-striped">
            <thead>
                <tr>
                    <th>Header 1</th>
                    <th>Header 2</th>
                    <th>Header 2</th>
                    <th>Header 2</th>
                </tr>
            </thead>
            <tbody>
              <tr>
                <td>
                  a
                </td>
                <td>
                  b
                </td>
                <td>
                  c
                </td>
                <td>
                  d
                </td>
              </tr>
              <tr>
                <td>
                  1
                </td>
                <td>
                  2
                </td>
                <td>
                  3
                </td>
                <td>
                  4
                </td>
                <tr>
                <td>
                  e
                </td>
                <td>
                  f
                </td>
                <td>
                  g
                </td>
                <td>
                  h
                </td>
               
              </tr>
              </tr>
            </tbody>
        </table>
        
                
        <button type="button" onclick="restartTable()">restart table</button>

Solution 20 - Javascript

Just Clear the table body.

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

Solution 21 - Javascript

Assuming the <table> element is accessible (e.g. by id), you can select the table body child node and then remove each child until no more remain. If you have structured your HTML table properly, namely with table headers in the <thead> element, this will only remove the table rows.

We use lastElementChild to preserve all non-element (namely #text nodes and ) children of the parent (but not their descendants). See this SO answer for a more general example, as well as an analysis of various methods to remove all of an element's children.

const tableEl = document.getElementById('my-table');

const tableBodyEl = tableEl.querySelector('tbody');

// or, directly get the <tbody> element if its id is known
// const tableBodyEl = document.getElementById('table-rows');

while (tableBodyEl.lastElementChild) {
  tableBodyEl.removeChild(tableBodyEl.lastElementChild);
}

<table id="my-table">
  <thead>
    <tr>
      <th>Name</th>
      <th>Color</th>
    </tr>
  </thead>
  <tbody id="table-rows">
    <tr>
      <td>Apple</td>
      <td>Red</td>
    </tr>
    <!-- comment child preserved -->
    text child preserved
    <tr>
      <td>Banana</td>
      <td>Yellow</td>
    </tr>
    <tr>
      <td>Plum</td>
      <td>Purple</td>
    </tr>
  </tbody>
</table>

Solution 22 - Javascript

const table = document.querySelector('table'); table.innerHTML === ' ' ? null : table.innerHTML = ' '; the above javascript worked fine for me. It checks to see if the table contains any data and then clears everything including the header.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionK&#39;&#39;View Question on Stackoverflow
Solution 1 - JavascriptApparaoView Answer on Stackoverflow
Solution 2 - JavascriptQuentinView Answer on Stackoverflow
Solution 3 - JavascriptMarcelView Answer on Stackoverflow
Solution 4 - JavascriptManohar Reddy PoreddyView Answer on Stackoverflow
Solution 5 - JavascriptcstratView Answer on Stackoverflow
Solution 6 - JavascriptFrancisco López-SanchoView Answer on Stackoverflow
Solution 7 - JavascriptOSBView Answer on Stackoverflow
Solution 8 - JavascriptsidView Answer on Stackoverflow
Solution 9 - JavascriptlkanView Answer on Stackoverflow
Solution 10 - JavascriptHuntsManView Answer on Stackoverflow
Solution 11 - JavascriptVinaykumar PatelView Answer on Stackoverflow
Solution 12 - JavascriptLen WhiteView Answer on Stackoverflow
Solution 13 - JavascriptSuresh AttaView Answer on Stackoverflow
Solution 14 - Javascriptyoozer8View Answer on Stackoverflow
Solution 15 - JavascriptLester NortheView Answer on Stackoverflow
Solution 16 - JavascriptAndreeaView Answer on Stackoverflow
Solution 17 - Javascriptuser3423649View Answer on Stackoverflow
Solution 18 - JavascriptNeil HigginsView Answer on Stackoverflow
Solution 19 - JavascriptJaime VasquezView Answer on Stackoverflow
Solution 20 - JavascriptsivaView Answer on Stackoverflow
Solution 21 - Javascriptzr0gravity7View Answer on Stackoverflow
Solution 22 - JavascriptPope FrancisView Answer on Stackoverflow