271 votes

Comment puis-je obtenir un enfant spécifique en utilisant CSS?

J'ai une table dont les td sont créés dynamiquement. Je sais comment obtenir le premier et le dernier enfant mais ma question est :

Existe-t-il un moyen d'obtenir le deuxième ou le troisième enfant en utilisant CSS ?

400voto

BoltClock Points 249668

Pour les navigateurs modernes, utilisez td:nth-child(2) pour le deuxième td, et td:nth-child(3) pour le troisième. N'oubliez pas que ces sélecteurs récupèrent le deuxième et le troisième td pour chaque ligne.

Si vous avez besoin de compatibilité avec IE plus ancien que la version 9, utilisez des combinateurs adjacents ou du JavaScript comme suggéré par Tim. Consultez également ma réponse à cette question connexe pour une explication et une illustration de sa méthode.

19 votes

N'oubliez pas que cela fonctionne uniquement avec CSS 3 sélecteurs (en d'autres termes, pas dans les versions d'IE antérieures à 9).

1 votes

3 votes

En tant que solution générale, td:nth-of-type(3) est meilleure. td:nth-child(3) correspondra à un élément qui est à la fois un td et le troisième enfant de son parent, peu importe les types d'éléments de ses deux précédents frères et soeurs. td:nth-of-type(3) obtiendra le troisième td, peu importe combien d'éléments non-td se trouvent avant lui. S'il n'y a pas d'éléments non-td avant celui que vous voulez, les deux sélecteurs correspondront à la même chose.

233voto

Tim Points 3254

For IE 7 & 8 (et les autres navigateurs sans support CSS3, à l'exception d'IE6), vous pouvez utiliser ce qui suit pour obtenir le 2e et 3e enfants:

2e Enfant:

td:first-child + td

3e Enfant:

td:first-child + td + td

Ensuite, ajoutez simplement un autre + td pour chaque enfant supplémentaire que vous souhaitez sélectionner.

Si vous souhaitez prendre en charge IE6, c'est également possible ! Vous avez simplement besoin d'utiliser un peu de javascript (jQuery dans cet exemple):

$(function() {
    $('td:first-child').addClass("firstChild");
    $(".table-class tr").each(function() {
        $(this).find('td:eq(1)').addClass("secondChild");
        $(this).find('td:eq(2)').addClass("thirdChild");
    });
});

Ensuite, dans votre css, utilisez simplement ces sélecteurs de classe pour apporter les modifications désirées:

table td.firstChild { /*contenu ici*/ }
table td.secondChild { /*contenu à appliquer au deuxième td de chaque ligne*/ }

19 votes

Merci pour le conseil IE7/8. Fonctionne très bien.

2 votes

Vous pouvez prendre les sélecteurs CSS3 dans ma réponse ou les sélecteurs CSS2 dans la vôtre et les insérer directement dans jQuery, ils fonctionneront naturellement dans IE6. Pas besoin de faire tous ces efforts supplémentaires pour ajouter les classes.

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