jQuery elimina tutte le righe della tabella tranne la prima


280

Utilizzando jQuery, come posso eliminare tutte le righe in una tabella tranne la prima? Questo è il mio primo tentativo di utilizzare i selettori di indice. Se capisco correttamente gli esempi, dovrebbe funzionare quanto segue:

$(some table selector).remove("tr:gt(0)");

che vorrei leggere come "Avvolgere una tabella in un oggetto jQuery, quindi rimuovere tutti gli elementi 'tr' (righe) in cui l'indice degli elementi di tali righe è maggiore di zero". In realtà, viene eseguito senza generare un errore, ma non rimuove alcuna riga dalla tabella.

Cosa mi manca e come posso risolvere questo problema? Certo, potrei usare javascript direttamente, ma mi sto divertendo così tanto con jQuery che mi piacerebbe risolverlo usando jQuery.


Qualcuno sa perché il codice dato non funziona? Ho anche problemi a mettere il selettore filtri nella funzione di rimozione
Leto,

1
Ora che lo capisco meglio, il codice sopra non funziona perché $ (alcuni selettori di tabella) seleziona solo l'elemento table, non uno dei suoi figli, quindi non ci sono elementi 'tr' che la funzione remove possa trovare. L'utilizzo della funzione trova cerca le corrispondenze tra i figli dell'elemento tabella.
Ken Paul,

Risposte:


522

Questo dovrebbe funzionare:

$(document).ready(function() {
   $("someTableSelector").find("tr:gt(0)").remove();
});

2
Cosa succede se desidero rimuovere le righe della tabella tranne first e seconde?

18
@ user594166 usa gt (1) invece di gt (0).
christianvuerings,

6
Dal sito Web di jQuery: Because :gt() is a jQuery extension and not part of the CSS specification, queries using :gt() cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").slice(index) instead. consiglierei di usare $ ("# mytable> tr"). Slice (1) .remove ();
Chris_F,

il tuo codice non ha funzionato per me .. ho cambiato gt (0) in gt (1) e ha funzionato.
saadk,

113

Penso che questo sia più leggibile dato l'intento:

$('someTableSelector').children( 'tr:not(:first)' ).remove();

L'uso di children si occupa anche del caso in cui la prima riga contiene una tabella limitando la profondità della ricerca.

Se hai avuto un elemento TBODY, puoi farlo:

$("someTableSelector > tbody:last").children().remove();

Se hai elementi THEAD o TFOOT dovrai fare qualcosa di diverso.


2
ri: fai qualcosa di diverso .... funziona:$('someTableSelector > tbody:last > tr:not(:first)').remove();
Cheeso

per rimuovere tutti i bambini ho dovuto usare virgolette doppie. Non lo riconoscevo altrimenti. $("#tasks").children().remove();
Doomsknight,

40

Un altro modo per ottenere questo risultato è usare la funzione empty () di jQuery con gli elementi thead e tbody nella tabella.

Esempio di una tabella:

<table id="tableId">
<thead>
    <tr><th>Col1</th><th>Col2</th></tr>
</thead>
<tbody>
    <tr><td>some</td><td>content</td></tr>
    <tr><td>to be</td><td>removed</td></tr>
</tbody>
</table>

E il comando jQuery:

$("#tableId > tbody").empty();

Ciò rimuoverà tutte le righe contenute nell'elemento tbody della tabella e manterrà l'elemento thead nel punto in cui dovrebbe trovarsi l'intestazione. Può essere utile quando si desidera aggiornare solo il contenuto di una tabella.


3
Questo probabilmente avrà le migliori prestazioni di tutte le soluzioni offerte ed è molto elegante.
the.jxc,

38

Se fossi in me, probabilmente lo riassumerei in un solo selettore:

$('someTableSelector tr:not(:first)').remove();

D'accordo, ma più specifico deve dire: $ ('someTableSelector tbody tr: not (: first)'). Remove ();
Marco Muciño,

30

Non è necessario che il tuo selettore sia all'interno della tua rimozione.

Dovrebbe assomigliare a:

$("#tableID tr:gt(0)").remove();

Il che significa selezionare ogni riga tranne la prima nella tabella con ID di tableID e rimuoverli dal DOM.


Sono d'accordo. Nel mio caso, l'oggetto tabella era stato precedentemente selezionato.
Ken Paul,

Per rimuovere tutte le righe tranne la prima: - $ ("# tableID tr: gt (1)"). Remove ();
Biki,

9
$('#table tr').slice(1).remove();

Ricordo che imbattermi in quella "fetta" è più veloce di tutti gli altri approcci, quindi basta metterlo qui.


Alcuni non ha funzionato per me. La risposta accettata sembra fare il trucco.
ankush981,

gtè deprecato, questa è la risposta migliore.
CyberEd

7

Considera una tabella con ID tbl: il codice jQuery sarebbe:

$('#tbl tr:not(:first)').remove();

3

Per rimuovere tutte le righe, tranne la prima (tranne l'intestazione), utilizzare il codice seguente:

$("#dataTable tr:gt(1)").remove();


1

Il modo più semplice:

$("#mytable").find($("tr")).slice(1).remove()

-prima riferimento alla tabella
-get la lista di elementi e la suddividete e rimuovete gli elementi selezionati della lista


0

-Scusa, questa è una risposta molto tardi.

Il modo più semplice che ho trovato per eliminare qualsiasi riga (e tutte le altre righe tramite iterazione) è questo

$ ( '# Rowid', '# IDtabella') remove ().;

Il resto è facile.


0
$ ("# p-items"). find ('tr.row-items') .remove ();

0

avvolto in una funzione:

function remove_rows(tablename) { 
    $(tablename).find("tr:gt(0)").remove();        
}

quindi chiamalo:

remove_rows('#table1');
remove_rows('#table2');

0

Funziona perfettamente

$("#myTable tbody").children( 'tr:not(:first)' ).html("");

Sì, era già stato pubblicato più volte prima. Niente di nuovo?
Nico Haase,

0

Nel mio caso ha funzionato nel modo seguente e ha funzionato bene

$("#compositeTable").find("tr:gt(1)").remove();
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.