L'approche que vous suggérez n'est pas garantie de vous donner le résultat que vous recherchez - et si vous aviez une tbody
par exemple :
<table id="myTable">
<tbody>
<tr>...</tr>
<tr>...</tr>
</tbody>
</table>
Vous vous retrouveriez avec les éléments suivants :
<table id="myTable">
<tbody>
<tr>...</tr>
<tr>...</tr>
</tbody>
<tr>...</tr>
</table>
Je recommande donc plutôt cette approche :
$('#myTable tr:last').after('<tr>...</tr><tr>...</tr>');
Vous pouvez inclure tout ce que vous voulez dans le champ after()
pour autant qu'il s'agisse d'un code HTML valide, y compris les lignes multiples comme dans l'exemple ci-dessus.
Mise à jour : Je reviens sur cette réponse suite à une activité récente sur cette question. L'impassibilité fait un bon commentaire sur le fait qu'il y aura toujours un tbody
dans le DOM ; c'est vrai, mais seulement s'il y a au moins une ligne. S'il n'y a pas de rangée, il n'y aura aucune tbody
sauf si vous en avez spécifié un vous-même.
DaRKoN_ suggère en ajoutant à la tbody
plutôt que d'ajouter du contenu après le dernier tr
. Cela permet de contourner le problème de l'absence de rangées, mais ce n'est toujours pas infaillible, car vous pourriez théoriquement avoir de multiples tbody
et la ligne sera ajoutée à chacun d'eux.
Tout bien pesé, je ne suis pas sûr qu'il existe une solution unique qui tienne compte de tous les scénarios possibles. Vous devrez vous assurer que le code jQuery correspond à votre balisage.
Je pense que la solution la plus sûre est probablement de s'assurer que vos table
comprend toujours au moins un tbody
dans votre balisage, même s'il ne comporte pas de lignes. Sur cette base, vous pouvez utiliser ce qui suit, qui fonctionnera quel que soit le nombre de lignes que vous avez (et qui tient également compte de l'existence de plusieurs fichiers tbody
éléments) :
$('#myTable > tbody:last-child').append('<tr>...</tr><tr>...</tr>');
3 votes
Merci, Ash. Je suis moi aussi en train d'apprendre jQuery et j'ai du mal à trouver la meilleure façon de faire, surtout pour les choses simples. La raison pour laquelle il s'agit de 2 questions est que j'en ai posté une et ensuite presque une heure plus tard j'ai réalisé que j'aurais dû mettre l'autre et que je ne pensais pas que je devais changer la première.
33 votes
A cause de ça : google.com/search?q=jquery+add+table+row
19 votes
Pour votre information, évitez d'utiliser les ajouts multiples (qui ralentissent énormément les performances), construisez plutôt votre chaîne ou utilisez la jointure JavaScript qui est beaucoup plus rapide.
1 votes
Voir : stackoverflow.com/a/50365764/7186739
1 votes
Juste au cas où la ligne est trop complexe, ce que je fais, c'est de garder la première ligne cachée avec la structure requise, faire un clone et modifier le texte et l'insérer après la première ligne, de cette façon, si vous récupérez les données de la réponse ajax, votre tableau sera créé, n'oubliez pas de le cloner en dehors de la boucle, puis de l'utiliser pour modifier le contenu à l'intérieur de la boucle. $("#mainTable tbody").append(row) ; row est la copie clonée modifiée :)