Qual è il modo migliore per rimuovere una riga di tabella con jQuery?


Risposte:


434

Hai ragione:

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

Funziona bene se la tua riga ha un id, come ad esempio:

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

Se non ne hai uno id, puoi usare una qualsiasi delle pletora di selettori di jQuery .


Sì, immaginavo che la riga avesse un ID e tu l'ID :)
Darryl Hein,

2
Farlo in questo modo significa che è necessario un ID per riga che potenzialmente aggiunge un sacco di overhead. jQuery consente altri approcci che sono più idiomatici (all'approccio di jQuery), proseguendo nella lettura ci sono più suggerimenti.
Ian Lewis,

Ha funzionato alla grande per me dato che sono stato in grado di inserire un ID univoco in ogni riga.
Jim Evans,

2
Roba impressionante! JQuery è il futuro!
Heinkasner,

1
"Jefe, cos'è una pletora?"
Pete,

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

Anche meglio

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

4
Strano, la tua soluzione è infinitamente migliore di quella accettata.
Rilassarsi a Cipro il

3
@jorg, solo per citarlo, hai un refuso nella tua risposta, dopo il .click devi mettere la funzione () richiamare
Franco

7
anche $ (questo) .closest ('tr'). remove ();
LeRoy,

61

Supponendo che tu abbia un pulsante / collegamento all'interno di una cella di dati nella tua tabella, qualcosa del genere farebbe il trucco ...

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

Ciò rimuoverà il genitore del genitore del pulsante / collegamento su cui si fa clic. Devi usare parent () perché è un oggetto jQuery, non un normale oggetto DOM, e devi usare parent () due volte, perché il pulsante vive all'interno di una cella di dati, che vive all'interno di una riga .... cosa vuoi rimuovere. $ (questo) è il pulsante selezionato, quindi semplicemente avere qualcosa di simile rimuoverà solo il pulsante:

$(this).remove();

Mentre questo rimuoverà la cella di dati:

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

Se vuoi semplicemente fare clic in un punto qualsiasi della riga per rimuoverlo, qualcosa del genere funzionerebbe. Puoi facilmente modificarlo per richiedere all'utente o lavorare solo con un doppio clic:

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

Spero che aiuti ... Ho faticato un po 'su questo me stesso.


25
Cosa succede se il collegamento non si trova direttamente all'interno della TD, ma ha, diciamo, un arco attorno ad esso? Penso che sarebbe meglio fare $ (this) .parents ('tr'). Remove (); per lasciarlo camminare da solo sull'albero DOM, trovare il tr e rimuoverlo.
Paolo Bergantino,

2
Funzionerebbe anche quello. Tutto dipende da dove si trova il tuo pulsante / link nel DOM, motivo per cui ho dato così tanti esempi e una spiegazione così lunga.
Troia

2
Puoi anche usare $ (questo) .parents ('tr')
cgreeno il

7
.live è stato deprecato in jQuery 1.7 e rimosso in 1.9. Vedi jQuery.live

42

Puoi usare:

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

per trovare la riga della tabella padre di un elemento.

È più elegante di parent (). Parent () che è quello che ho iniziato a fare e presto ho imparato l'errore dei miei modi.

--Modifica - Qualcuno ha sottolineato che la domanda riguardava la rimozione della riga ...

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

Come indicato di seguito puoi semplicemente fare:

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

Uno snippet di codice simile può essere utilizzato per molte operazioni come l'attivazione di eventi su più elementi.


4
Un po 'più conciso:$(this).closest("tr").remove()
Barry Kaye il

15

Facile .. Prova questo

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

10
Vorrei cambiare $(this).parent().parent().parent()in $(this).closest('tr'). È più robusto e mostra chiaramente ciò che stai selezionando.
Nickf,


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

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

Forse potrebbe funzionare anche qualcosa del genere? Non ho provato a fare qualcosa con "questo", quindi non so se funziona o no.


1
Bene, direi che sarebbe un po 'strano se la riga sparisse facendo clic su di essa. Al momento ho un link nella riga per eliminare la riga.
Darryl Hein,

8

Tutto quello che devi fare è rimuovere il <tr>tag row ( ) dalla tabella. Ad esempio, ecco il codice per rimuovere l'ultima riga dalla tabella:

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

* Il codice sopra è stato preso da questo post HowQuo di jQuery .


7

prova questo per dimensioni

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

elenco completo:

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

vederlo in azione


4

Un altro di empty():

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

1
Questo non rimuove tutti i <td> ma non i <tr>? Suppongo che il browser potrebbe rimuovere automaticamente <tr>, ma sospetto che non sia garantito.
Darryl Hein,

2

Se la riga che desideri eliminare potrebbe cambiare, puoi usarla. Basta passare questa funzione alla riga # che si desidera eliminare.

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

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

penso che proverai il codice sopra, come funziona, ma non so perché funzioni per qualche tempo e quindi l'intera tabella viene rimossa. sto anche cercando di rimuovere la riga facendo clic sulla riga. ma non sono riuscito a trovare la risposta esatta.


Non sono sicuro se hai già provato $ ('tr'). Live ("click", function () {$ (this) .remove ();});
gfivehost,

1

se hai HTML come questo

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

dove userid="123"è un attributo personalizzato che puoi popolare dinamicamente quando compili la tabella,

puoi usare qualcosa del genere

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

     });

Quindi in quel caso non conosci la classe o l'id del TRtag ma comunque riesci a eliminarlo.


penso che live sia ora deprecato in favore di on, $ (". spanUser"). on ('click', function () {
Tofuwarrior il

1

Apprezzo che questo sia un vecchio post, ma stavo cercando di fare lo stesso e ho scoperto che la risposta accettata non funzionava per me. Supponendo che JQuery sia passato da quando è stato scritto.

Comunque, ho trovato il seguente ha funzionato per me:

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

Non sono sicuro se questo aiuta qualcuno. Il mio esempio sopra faceva parte di una funzione più grande, quindi non lo avvolgevo in un listener di eventi.


0

Se si utilizzano tabelle Bootstrap

aggiungi questo snippet di codice al tuo 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);
};

Quindi nel tuo var allowedMethods = [

Inserisci 'removeRow'

Finalmente puoi usare $("#your-table").bootstrapTable('removeRow',{index:1});

Crediti per questo post


0

id non è un buon selettore ora. È possibile definire alcune proprietà nelle righe. E puoi usarli come selettore.

<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 puoi usare una funzione per selezionare la riga in questo modo (ES6):

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

rowRemover('petshop','fish');

0

Il metodo più semplice per rimuovere le righe dalla tabella:

  1. Rimuovi la riga della tabella usando il suo ID univoco.
  2. Rimuovi in ​​base all'ordine / indice di quella riga. Es: rimuovere la terza o la quinta fila.

Per esempio:

 <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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.