Qual é a melhor maneira de remover uma linha da tabela com o jQuery?


Respostas:


434

Você está certo:

$('#myTableRow').remove();

Isso funciona bem se sua linha tiver um id, como:

<tr id="myTableRow"><td>blah</td></tr>

Se você não possui um id, pode usar qualquer um dos inúmeros seletores do jQuery .


Sim, eu estava assumindo que a linha tem um ID e você tem o ID :)
Darryl Hein

2
Fazer dessa maneira significa que você precisa de um ID por linha, o que potencialmente adiciona muita sobrecarga. O jQuery permite outras abordagens que são mais idiomáticas (para a abordagem do jQuery), continue lendo, há mais sugestões.
Ian Lewis

Funcionou muito bem para mim, pois eu era capaz de colocar um ID exclusivo em cada linha.
21714 Jim Jim Evans

2
Coisas impressionantes! JQuery é o futuro!
heinkasner

1
"Jefe, o que é uma infinidade?"
Pete

110
$('#myTable tr').click(function(){
    $(this).remove();
    return false;
});

Ainda melhor

$("#MyTable").on("click", "#DeleteButton", function() {
   $(this).closest("tr").remove();
});

4
Estranho, sua solução é infinitamente melhor que a aceita.
Relaxando em Chipre

3
@jorg, só para mencionar isso, você tem um erro de digitação na sua resposta, após a .click você deve colocar o function () chamada de volta
Franco

7
também $ (this) .closest ('tr'). remove ();
LeRoy #

61

Supondo que você tenha um botão / link dentro de uma célula de dados em sua tabela, algo como isso faria o truque ...

$(".delete").live('click', function(event) {
    $(this).parent().parent().remove();
});

Isso removerá o pai do pai do botão / link clicado. Você precisa usar parent () porque é um objeto jQuery, não um objeto DOM normal, e precisa usar parent () duas vezes, porque o botão mora dentro de uma célula de dados, que mora dentro de uma linha .... o que você deseja remover. $ (this) é o botão clicado, portanto, simplesmente ter algo assim removerá apenas o botão:

$(this).remove();

Enquanto isso removerá a célula de dados:

    $(this).parent().remove();

Se você quiser simplesmente clicar em qualquer lugar da linha para removê-lo, algo assim funcionaria. Você pode modificar isso facilmente para solicitar ao usuário ou trabalhar apenas com um clique duplo:

$(".delete").live('click', function(event) {
    $(this).parent().remove();
});

Espero que ajude ... lutei um pouco com isso.


25
E se o link não estiver diretamente dentro do td, mas tiver, por exemplo, um espaço em torno dele? Eu acho que seria melhor fazer $ (this) .parents ('tr'). Remove (); para deixá-lo subir na árvore DOM sozinho, encontre o tr e remova-o.
Paolo Bergantino

2
Isso funcionaria também. Tudo depende de onde no DOM está o seu botão / link, e é por isso que dei tantos exemplos e uma explicação tão longa.
sluther

2
Você também pode usar $ (this) .parents ( 'tr')
cgreeno

7
.live foi descontinuado no jQuery 1.7 e removido no 1.9. Veja jQuery.live

42

Você pode usar:

$($(this).closest("tr"))

para encontrar a linha da tabela pai de um elemento.

É mais elegante que parent (). Parent (), que foi o que comecei a fazer e logo aprendi o erro dos meus caminhos.

--Edit - Alguém apontou que a pergunta era sobre remover a linha ...

$($(this).closest("tr")).remove()

Como indicado abaixo, você pode simplesmente fazer:

$(this).closest('tr').remove();

Um trecho de código semelhante pode ser usado para muitas operações, como disparar eventos em vários elementos.


4
Um pouco mais sucinto:$(this).closest("tr").remove()
Barry Kaye

15

Fácil .. Tente isso

$("table td img.delete").click(function () {
    $(this).parent().parent().parent().fadeTo(400, 0, function () { 
        $(this).remove();
    });
    return false;
});

10
Eu mudaria $(this).parent().parent().parent()para $(this).closest('tr'). É mais robusto e mostra claramente o que você está selecionando.
nickf


8
function removeRow(row) {
    $(row).remove();
}

<tr onmousedown="removeRow(this)"><td>Foo</td></tr>

Talvez algo assim pudesse funcionar também? Eu não tentei fazer algo com "isso", então não sei se funciona ou não.


1
Bem, eu diria que seria um pouco estranho a linha desaparecer quando você clicar nela. No momento, tenho um link na linha para excluir a linha.
Darryl Hein

8

Tudo o que você precisa fazer é remover a <tr>tag row ( ) da tabela. Por exemplo, aqui está o código para remover a última linha da tabela:

$('#myTable tr:last').remove();

* O código acima foi retirado desta postagem do jQuery Howto .


7

tente isso por tamanho

$(this).parents('tr').first().remove();

lista completa:

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

vê-lo em ação


4

Outro por empty():

$(this).closest('tr').empty();

1
Isso não remove todos os <td> 's, mas não os <tr>? Acho que o navegador pode remover o <tr> automaticamente, mas suspeito que isso não é garantido.
Darryl Hein

2

Se a linha que você deseja excluir pode mudar, você pode usá-lo. Apenas passe essa função na linha # que deseja excluir.

function removeMyRow(docRowCount){
   $('table tr').eq(docRowCount).remove();
}

1
$('tr').click(function()
 {
  $(this).remove();
 });

Eu acho que você vai tentar o código acima, como ele funciona, mas eu não sei por que ele funciona por algum tempo e, em seguida, toda a tabela é removida. Também estou tentando remover a linha clicando na linha. mas não conseguiu encontrar a resposta exata.


Não tenho certeza se você já tentou o $ ('tr'). Live ("clique", function () {$ (this) .remove ();});
Gfivehost 13/08

1

se você tem HTML assim

<tr>
 <td><span class="spanUser" userid="123"></span></td>
 <td><span class="spanUser" userid="123"></span></td>
</tr>

onde userid="123"é um atributo personalizado que você pode preencher dinamicamente ao criar a tabela,

você pode usar algo como

  $(".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.');
            }
        }); 

     });

Portanto, nesse caso, você não conhece a classe ou o ID da TRtag, mas pode excluí-la.


acho que o live agora está obsoleto em favor de on, $ (". spanUser"). on ('click', function () {
Tofuwarrior

1

Aprecio que este é um post antigo, mas estava procurando fazer o mesmo e achei que a resposta aceita não funcionou para mim. Supondo que o JQuery seguiu em frente desde que isso foi gravado.

De qualquer forma, descobri o seguinte para mim:

$('#resultstbl tr[id=nameoftr]').remove();

Não tenho certeza se isso ajuda alguém. Meu exemplo acima fazia parte de uma função maior, portanto não a envolvia em um ouvinte de evento.


0

Se você estiver usando Tabelas de Bootstrap

adicione esse snippet de código ao seu 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);
};

Então no seu var allowedMethods = [

adicionar 'removeRow'

Finalmente você pode usar $("#your-table").bootstrapTable('removeRow',{index:1});

Créditos para esta postagem


0

id não é um bom seletor agora. Você pode definir algumas propriedades nas linhas. E você pode usá-los como seletor.

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

e você pode usar uma func para selecionar a linha assim (ES6):

const rowRemover = (category,type)=>{
   $(`tr[category=${category}][type=${type}]`).remove();
}

rowRemover('petshop','fish');

0

O método mais fácil de remover linhas da tabela:

  1. Remova a linha da tabela usando seu ID exclusivo.
  2. Remova com base no pedido / índice dessa linha. Ex: remova a terceira ou quinta linha.

Por exemplo:

 <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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.