121 votes

Jquery insert une nouvelle ligne dans un tableau à un certain index

Je sais comment ajouter ou précéder une nouvelle ligne dans un tableau à l'aide de Jquery :

$('#my_table > tbody:last').append(html);

Comment puis-je insérer la ligne (donnée dans la variable html) dans un "index de ligne" spécifique ? i . Donc si i=3 par exemple, la ligne sera insérée en tant que quatrième ligne du tableau.

0 votes

165voto

Nick Craver Points 313913

Vous pouvez utiliser .eq() et .after() comme ça :

$('#my_table > tbody > tr').eq(i-1).after(html);

Les index sont basés sur 0, donc pour être la 4ème ligne, il faut i-1 puisque .eq(3) serait la 4ème ligne, vous devez revenir à la 3ème ligne ( 2 ) et insérer .after() que.

8 votes

Il convient de noter que si la fonction eq de jQuery reçoit une valeur négative, elle tourne en boucle jusqu'à la fin du tableau. Ainsi, en exécutant cette fonction et en essayant de l'insérer à l'index 0, la nouvelle ligne sera insérée à la fin du tableau.

2 votes

Et ajoutez .before(html) si vous voulez l'insérer avant cet indice

1 votes

Cela échoue s'il n'y a pas de lignes dans la table. Quelqu'un a-t-il une solution (basée sur un index) qui fonctionne même pour la première ligne ?

19voto

user113716 Points 143363

Essayez ça :

var i = 3;

$('#my_table > tbody > tr:eq(' + i + ')').after(html);

ou ceci :

var i = 3;

$('#my_table > tbody > tr').eq( i ).after(html);

ou ceci :

var i = 4;

$('#my_table > tbody > tr:nth-child(' + i + ')').after(html);

Tous ces éléments placeront la rangée dans la même position. nth-child utilise un indice basé sur 1.

4voto

Note :

$('#my_table > tbody:last').append(newRow); // this will add new row inside tbody

$("table#myTable tr").last().after(newRow);  // this will add new row outside tbody 
                                             //i.e. between thead and tbody
                                             //.before() will also work similar

1voto

Adam Points 14766

Utilisez le sélecteur d'égalisation pour sélectionner la nième ligne (basée sur 0) et ajouter votre ligne après elle en utilisant après donc :

$('#my_table > tbody:last tr:eq(2)').after(html);

où html est un tr

1voto

Arjan Points 3549
$('#my_table tbody tr:nth-child(' + i + ')').after(html);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X