Quelle est la meilleure méthode dans jQuery pour ajouter une ligne supplémentaire à un tableau comme dernière ligne?
Est-ce acceptable?
$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');
Y a-t-il des limites à ce que vous pouvez ajouter à une table comme celle-ci (comme les entrées, les sélections, le nombre de lignes)?
javascript
jquery
html-table
Darryl Hein
la source
la source
Réponses:
L'approche que vous proposez n'est pas garantie de vous donner le résultat que vous recherchez - et si vous en aviez un
tbody
par exemple:Vous vous retrouveriez avec ce qui suit:
Je recommanderais donc plutôt cette approche:
Vous pouvez inclure n'importe quoi dans la
after()
méthode tant qu'il s'agit d'un code HTML valide, y compris plusieurs lignes selon l'exemple ci-dessus.Mise à jour: réexamen de cette réponse suite à une activité récente avec cette question. la paupière fait un bon commentaire qu'il y aura toujours un
tbody
dans le DOM; c'est vrai, mais seulement s'il y a au moins une ligne. Si vous n'avez pas de lignes, il n'y en aura pastbody
sauf si vous en avez spécifié une vous-même.DaRKoN_ suggère d' ajouter à la
tbody
plutôt que d'ajouter du contenu après le derniertr
. Cela résout le problème de l'absence de lignes, mais n'est toujours pas à l'épreuve des balles car vous pourriez théoriquement en avoir plusieurstbody
éléments et la ligne serait ajoutée à chacun d'eux.En pesant tout, je ne suis pas sûr qu'il existe une seule solution sur une seule ligne qui tienne compte de chaque scénario possible. 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 vous en
table
incluez toujours au moins untbody
dans votre balisage, même s'il n'a pas de lignes. Sur cette base, vous pouvez utiliser les éléments suivants, qui fonctionneront autant de lignes que vous avez (et tiennent également compte de plusieurstbody
éléments):la source
$('#myTable').find('tbody:last')
au lieu de$('#myTable > tbody:last')
.jQuery a une fonction intégrée pour manipuler les éléments DOM à la volée.
Vous pouvez ajouter n'importe quoi à votre table comme ceci:
La
$('<some-tag>')
chose dans jQuery est un objet balise qui peut avoir plusieursattr
attributs qui peuvent être définis et récupérés, ainsi quetext
, qui représente le texte entre la balise ici:<tag>text</tag>
.Il s'agit d'une indentation assez étrange, mais il est plus facile pour vous de voir ce qui se passe dans cet exemple.
la source
Les choses ont donc changé depuis que @Luke Bennett a répondu à cette question. Voici une mise à jour.
jQuery depuis la version 1.4 (?) détecte automatiquement si l'élément que vous essayez d'insérer (en utilisant l'un des
append()
,prepend()
,before()
ouafter()
méthodes) est un<tr>
et l' insère dans la première<tbody>
dans votre table ou encapsule dans une nouvelle<tbody>
si l' on ne exister.Alors oui, votre exemple de code est acceptable et fonctionnera correctement avec jQuery 1.4+. ;)
la source
yourString.trim()
pourrais y remédier.Et si vous aviez un
<tbody>
et un<tfoot>
?Tel que:
Ensuite, il insérerait votre nouvelle ligne dans le pied de page - pas dans le corps.
Par conséquent, la meilleure solution consiste à inclure une
<tbody>
balise et à utiliser.append
plutôt que.after
.la source
Je sais que vous avez demandé une méthode jQuery. J'ai beaucoup regardé et je trouve que nous pouvons le faire d'une meilleure manière que d'utiliser JavaScript directement par la fonction suivante.
index
est un entier qui spécifie la position de la ligne à insérer (commence à 0). La valeur -1 peut également être utilisée; ce qui entraîne que la nouvelle ligne sera insérée à la dernière position.Ce paramètre est obligatoire dans Firefox et Opera , mais il est facultatif dans Internet Explorer, Chrome et Safari .
Si ce paramètre est omis,
insertRow()
insère une nouvelle ligne à la dernière position dans Internet Explorer et à la première position dans Chrome et Safari.Cela fonctionnera pour chaque structure acceptable de tableau HTML.
L'exemple suivant insère une ligne dans last (-1 est utilisé comme index):
J'espère que ça aide.
la source
je recommande
par opposition à
Les mots clés
first
etlast
fonctionnent sur la première ou la dernière balise à démarrer et non à fermer. Par conséquent, cela fonctionne mieux avec les tables imbriquées, si vous ne voulez pas que la table imbriquée soit modifiée, mais plutôt ajoutez à la table globale. C'est du moins ce que j'ai trouvé.la source
À mon avis, le moyen le plus rapide et le plus clair est
voici la démo Fiddle
Je peux aussi recommander une petite fonction pour faire plus de changements html
Si vous utilisez mon compositeur de cordes, vous pouvez le faire comme
Voici la démo Fiddle
la source
tbody
vous pouvez obtenir plusieurs inserts$("SELECTOR").last()
de limiter votre collection de tagsCela peut être fait facilement en utilisant la fonction "last ()" de jQuery.
la source
J'utilise de cette façon quand il n'y a pas de ligne dans le tableau, ainsi, chaque ligne est assez compliquée.
style.css:
xxx.html
la source
Pour la meilleure solution publiée ici, s'il y a une table imbriquée sur la dernière ligne, la nouvelle ligne sera ajoutée à la table imbriquée au lieu de la table principale. Une solution rapide (en considérant les tables avec / sans tbody et les tables avec tables imbriquées):
Exemple d'utilisation:
la source
Je l'ai résolu de cette façon.
Utilisation de jquery
Fragment
la source
J'avais des problèmes connexes, j'essayais d'insérer une ligne de tableau après la ligne cliquée. Tout va bien sauf que l'appel .after () ne fonctionne pas pour la dernière ligne.
J'ai atterri avec une solution très désordonnée:
créez le tableau comme suit (id pour chaque ligne):
etc ...
et alors :
la source
Vous pouvez utiliser cette excellente fonction jQuery ajouter une ligne de table . Cela fonctionne très bien avec des tables qui ont
<tbody>
et qui n'en ont pas. Il prend également en compte le colspan de votre dernière ligne de tableau.Voici un exemple d'utilisation:
la source
Ma solution:
usage:
la source
tbody
de table .. ?? signifie qu'il peut y avoir une ligne directement à l'intérieur de l'<table>
élément, même sans en-tête.la source
La réponse de Neil est de loin la meilleure. Cependant, les choses se compliquent très vite. Ma suggestion serait d'utiliser des variables pour stocker des éléments et les ajouter à la hiérarchie DOM.
HTML
JAVASCRIPT
la source
Écrivez avec une fonction javascript
la source
J'ai trouvé ce plugin AddRow très utile pour gérer les lignes de table. Cependant, la solution de Luke serait la meilleure solution si vous avez juste besoin d'ajouter une nouvelle ligne.
la source
Voici du code de piratage hacketi. Je voulais conserver un modèle de ligne dans un HTML page . Les lignes de table 0 ... n sont rendues au moment de la demande, et cet exemple a une ligne codée en dur et une ligne de modèle simplifiée. La table de modèles est masquée et la balise de ligne doit se trouver dans une table valide, sinon les navigateurs peuvent la supprimer de l' arborescence DOM . L'ajout d'une ligne utilise le compteur + 1 identifiant et la valeur actuelle est conservée dans l'attribut de données. Il garantit que chaque ligne obtient une URL unique paramètres d' .
J'ai exécuté des tests sur Internet Explorer 8, Internet Explorer 9, Firefox, Chrome, Opera, Nokia Lumia 800 , Nokia C7 (avec Symbian 3), Android stock et Firefox beta navigateurs.
PS: je donne tous les crédits à l'équipe jQuery; ils méritent tout. Programmation JavaScript sans jQuery - Je ne veux même pas penser à ce cauchemar.
la source
la source
Je suppose que j'ai fait dans mon projet, le voici:
html
js
la source
C'est ma solution
la source
si vous avez une autre variable, vous pouvez accéder à une
<td>
balise comme celle-ci, essayez.De cette façon, j'espère que ce serait utile
la source
Comme j'ai également un moyen d'ajouter enfin une ligne ou tout autre endroit spécifique, je pense que je devrais également partager ceci:
Découvrez d'abord la longueur ou les rangées:
puis utilisez le code ci-dessous pour ajouter votre ligne:
la source
Pour ajouter un bon exemple sur le sujet, voici une solution de travail si vous devez ajouter une ligne à une position spécifique.
La ligne supplémentaire est ajoutée après la 5e ligne ou à la fin du tableau s'il y a moins de 5 lignes.
Je mets le contenu sur un conteneur prêt (caché) sous le tableau .. donc si vous (ou le concepteur) devez le modifier, il n'est pas nécessaire de modifier le JS.
la source
Vous pouvez mettre en cache la variable de pied de page et réduire l'accès au DOM (Remarque: il sera peut-être préférable d'utiliser une fausse ligne au lieu du pied de page).
la source
ajoutera une nouvelle ligne à la première
TBODY
du tableau, sans dépendre d'aucuneTHEAD
ouTFOOT
présente. (Je n'ai pas trouvé d'informations à partir de quelle version de jQuery.append()
ce comportement est présent.)Vous pouvez l'essayer dans ces exemples:
Dans quel exemple la
a b
ligne est insérée après1 2
, pas après3 4
dans le deuxième exemple. Si la table était vide, jQuery créeTBODY
une nouvelle ligne.la source
Si vous utilisez le plug-in Datatable JQuery, vous pouvez essayer.
Reportez-vous à l' API fnAddData Datatables
la source
D'une manière simple:
la source
Essayez ceci: manière très simple
la source