2009-10-31 5 views
13

J'ai une table de données dont j'ai besoin pour ajouter dynamiquement une colonne. Disons que j'ai cette table de base pour commencer:Insérer une colonne de table avec jQuery

<table> 
<tr><td>cell 1</td><td>cell 2</td><td>cell 3</td></tr> 
<tr><td>cell 1</td><td>cell 2</td><td>cell 3</td></tr> 
<tr><td>cell 1</td><td>cell 2</td><td>cell 3</td></tr> 
</table> 

Je voudrais insérer une colonne entre 2 cellules 1 et cellule dans chaque rangée ... J'ai essayé cela, mais il ne fonctionne tout simplement comme Je me attends ...

$(document).ready(function(){ 
$('table').find('tr').each(function(){ 
    $(this).prepend('<td>cell 1a</td>'); 
}) 
}) 

Répondre

27

Essayez ceci:

$(document).ready(function(){ 
    $('table').find('tr').each(function(){ 
     $(this).find('td').eq(0).after('<td>cell 1a</td>'); 
    }); 
}); 

Votre code original ajouter la colonne à la fin de chaque ligne, pas entre les deux colonnes. Ceci trouve la première colonne et ajoute la cellule à côté de la première colonne.

+0

Merci, cela a fonctionné parfaitement! ... * sent la tête * J'aurais dû chercher la cellule et la placer après. J'ai vraiment besoin de caféine LOL – Mottie

+0

J'ai fini par utiliser 'td: eq (0)' parce qu'il y aura des fois où je dois insérer une colonne au milieu d'une table avec plus de 3 colonnes, puis tout ce dont j'ai besoin faire est de changer la variable ... merci encore pour l'aide! – Mottie

+0

C'est une bien meilleure idée. J'ai changé ma réponse pour inclure cela. –

2
$('table > tr > td:first-child').after('<td>cell 1a</td>'); 

tr > td sélectionne le premier niveau td après une tr, et after insère des données à l'extérieur de l'élément.

+0

J'ai essayé de tester cela et cela n'a pas fonctionné, mais merci quand même – Mottie

+2

Cela ne fonctionne pas car la plupart des navigateurs, sinon tous, vont entourer toutes les lignes autour d'une balise '', donc le sélecteur devrait être "' table > tbody> tr> td: premier-enfant' ". Bien sûr, cela peut être une requête assez lente à effectuer puisque jQuery devrait faire beaucoup de filtrage pour obtenir toutes les cellules dans une grande table ... –

0
$('td:first-child').after('&lt;td&gt;new cell&lt;/td&gt;'); 
Questions connexes