What is the best method for removing a table row with jQuery?
18 Answers
You're right:
$('#myTableRow').remove();
This works fine if your row has an id, such as:
<tr id="myTableRow"><td>blah</td></tr>
If you don't have an id, you can use any of jQuery's plethora of selectors.
 
    
    - 142,451
- 95
- 218
- 261
 
    
    - 14,021
- 6
- 31
- 22
- 
                    4Doing it this way does mean you need one id per row which potentially adds a lot of overhead. jQuery allows other approaches which are more idiomatic (to jQuery's approach), carry on reading there are more suggestions. – Ian Lewis Dec 10 '12 at 13:38
- 
                    For dynamic content make row id `unique` you can do it by appending something unique like this for php `` and same thing you have to generate this id when you remove it :) – Sagar Naliyapara Apr 26 '17 at 07:06
Assuming you have a button/link inside of a data cell in your table, something like this would do the trick...
$(".delete").live('click', function(event) {
    $(this).parent().parent().remove();
});
This will remove the parent of the parent of the button/link that is clicked. You need to use parent() because it is a jQuery object, not a normal DOM object, and you need to use parent() twice, because the button lives inside a data cell, which lives inside a row....which is what you want to remove. $(this) is the button clicked, so simply having something like this will remove only the button:
$(this).remove();
While this will remove the data cell:
    $(this).parent().remove();
If you want to simply click anywhere on the row to remove it something like this would work. You could easily modify this to prompt the user or work only on a double-click:
$(".delete").live('click', function(event) {
    $(this).parent().remove();
});
- 
                    25What if the link is not directly inside the td, but has, say, a span around it? I think it'd be better to do $(this).parents('tr').remove(); to let it walk up the DOM tree by itself, find the tr, and remove it. – Paolo Bergantino Mar 29 '09 at 05:01
- 
                    2That would work too. It all depends on where in the DOM your button/link is, which is why I gave so many examples and such a long explanation. – sluther Mar 30 '09 at 01:11
- 
                    2
- 
                    7.live was deprecated in jQuery 1.7, and removed in 1.9. See [jQuery.live](http://api.jquery.com/live/) – Jul 24 '13 at 11:28
You can use:
$($(this).closest("tr"))
for finding the parent table row of an element.
It is more elegant than parent().parent() which is what I started out doing and soon learnt the error of my ways.
--Edit -- Someone pointed out that the question was about removing the row...
$($(this).closest("tr")).remove()
As pointed out below you can simply do:
$(this).closest('tr').remove();
A similar code snippet can be used for many operations such as firing events on multiple elements.
 
    
    - 1,311
- 13
- 18
Easy.. Try this
$("table td img.delete").click(function () {
    $(this).parent().parent().parent().fadeTo(400, 0, function () { 
        $(this).remove();
    });
    return false;
});
 
    
    - 142,451
- 95
- 218
- 261
 
    
    - 161
- 1
- 2
- 
                    10I would change `$(this).parent().parent().parent()` to `$(this).closest('tr')`. It's more robust and clearly shows what you're selecting. – nickf Apr 17 '11 at 09:48
Is the following acceptable:
$('#myTableRow').remove();
 
    
    - 142,451
- 95
- 218
- 261
- 
                    This removes the whole table, not just the rows for the table. It leaves nothing to append to if you just want to clear out the rows. – vapcguy Nov 01 '21 at 22:46
All you have to do is to remove the table row (<tr>) tag from your table. For example here is the code to remove the last row from the table:
$('#myTable tr:last').remove();
*Code above was taken from this jQuery Howto post.
 
    
    - 11,655
- 3
- 37
- 54
function removeRow(row) {
    $(row).remove();
}
<tr onmousedown="removeRow(this)"><td>Foo</td></tr>
Maybe something like this could work as well? I haven't tried doing something with "this", so I don't know if it works or not.
 
    
    - 23,789
- 5
- 28
- 31
- 
                    1Well, I would say that would be a little weird have the row disappear when you click on it. At the moment I have a link in the row to delete the row. – Darryl Hein Oct 04 '08 at 21:57
try this for size
$(this).parents('tr').first().remove();
full listing:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
  <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js"></script>
  <script type="text/javascript">
    $(document).ready(function() {
        $('.deleteRowButton').click(DeleteRow);
      });
    function DeleteRow()
    {
      $(this).parents('tr').first().remove();
    }
  </script>
</head>
<body>
  <table>
    <tr><td>foo</td>
     <td><a class="deleteRowButton">delete row</a></td></tr>
    <tr><td>bar bar</td>
     <td><a class="deleteRowButton">delete row</a></td></tr>
    <tr><td>bazmati</td>
     <td><a class="deleteRowButton">delete row</a></td></tr>
  </table>
</body>
</html>
 
    
    - 11,186
- 8
- 79
- 110
Another one by empty() :
$(this).closest('tr').empty();
 
    
    - 24,317
- 7
- 44
- 60
 
    
    - 226
- 2
- 4
- 
                    2Doesn't that remove all the's but not the ? I'm guessing the browser may remove the automatically, but I suspect that's no guaranteed. – Darryl Hein May 21 '15 at 06:13
If the row you want to delete might change you can use this. Just pass this function the row # you wish to delete.
function removeMyRow(docRowCount){
   $('table tr').eq(docRowCount).remove();
}
 
    
    - 1,916
- 6
- 30
- 44
if you have HTML like this
<tr>
 <td><span class="spanUser" userid="123"></span></td>
 <td><span class="spanUser" userid="123"></span></td>
</tr>
where userid="123" is a custom attribute that you can populate dynamically when you build the table,
you can use something like
  $(".spanUser").live("click", function () {
        var span = $(this);   
        var userid = $(this).attr('userid');
        var currentURL = window.location.protocol + '//' + window.location.host;
        var url = currentURL + "/Account/DeleteUser/" + userid;
        $.post(url, function (data) {
          if (data) {
                   var tdTAG = span.parent(); // GET PARENT OF SPAN TAG
                   var trTAG = tdTAG.parent(); // GET PARENT OF TD TAG
                   trTAG.remove(); // DELETE TR TAG == DELETE AN ENTIRE TABLE ROW 
             } else {
                alert('Sorry, there is some error.');
            }
        }); 
     });
So in that case you don't know the class or id of the TR tag but anyway you are able to delete it.
 
    
    - 36,338
- 80
- 323
- 498
- 
                    think live is now deprecated in favour of on, $(".spanUser").on('click', function (){ – Tofuwarrior Jun 02 '14 at 11:14
$('tr').click(function()
 {
  $(this).remove();
 });
i think you will try the above code, as it work, but i don't know why it work for sometime and then the whole table is removed. i am also trying to remove the row by click the row. but could not find exact answer.
 
    
    - 142,451
- 95
- 218
- 261
- 
                    I am not sure if you already tried the $('tr').live("click",function(){ $(this).remove();}); – RicardO Aug 13 '11 at 13:01
I appreciate this is an old post, but I was looking to do the same, and found the accepted answer didn't work for me. Assuming JQuery has moved on since this was written.
Anyhow, I found the following worked for me:
$('#resultstbl tr[id=nameoftr]').remove();
Not sure if this helps anyone. My example above was part of a larger function so not wrapped it in an event listener.
 
    
    - 25
- 1
- 6
id is not a good selector now. You can define some properties on the rows. And you can use them as selector.
<tr category="petshop" type="fish"><td>little fish</td></tr>
<tr category="petshop" type="dog"><td>little dog</td></tr>
<tr category="toys" type="lego"><td>lego starwars</td></tr>
and you can use a func to select the row like this (ES6):
const rowRemover = (category,type)=>{
   $(`tr[category=${category}][type=${type}]`).remove();
}
rowRemover('petshop','fish');
 
    
    - 3,293
- 2
- 30
- 57
If you are using Bootstrap Tables
add this code snippet to your bootstrap_table.js
BootstrapTable.prototype.removeRow = function (params) {
    if (!params.hasOwnProperty('index')) {
        return;
    }
    var len = this.options.data.length;
    if ((params.index > len) || (params.index < 0)){
        return;
    }
    this.options.data.splice(params.index, 1);
    if (len === this.options.data.length) {
        return;
    }
    this.initSearch();
    this.initPagination();
    this.initBody(true);
};
Then in your var allowedMethods = [
add 'removeRow'
Finally you can use $("#your-table").bootstrapTable('removeRow',{index:1});
 
    
    - 3,154
- 31
- 51
The easiest method to remove rows from table:
- Remove row of table using its unique ID.
- Remove based on the order/index of that row. Ex: remove the third or fifth row.
For example:
 <table id='myTable' border='1'>
    <tr id='tr1'><td>Row1</td></tr>
    <tr id='tr2'><td>Row2</td></tr>
    <tr id='tr3'><td>Row3</td></tr>
    <tr id='tr4'><td>Row4</td></tr>
    <tr id='tr5'><td>Row5</td></tr>
  </table>
//======REMOVE TABLE ROW=========
//1. remove spesific row using its ID
$('#tr1').remove();
//2. remove spesific row using its order or index.
//row index started from 0-n. Row1 index is 0, Row2 index is 1 and so on.
$('#myTable').find('tr:eq(2)').remove();//removing Row3
 
    
    - 26
- 3
 
     
     
     
    