Comment choisir le premier, le deuxième ou le troisième élément avec un nom de classe?
Comment puis-je sélectionner un élément dans une liste d'éléments? J'ai le texte suivant:
<div class="myclass">my text1</div>
<!-- some other code follows -->
<div>
<p>stuff</p>
</div>
<div>
<p>more stuff</p>
</div>
<p>
<span>Hello World</span>
</p>
<div class="myclass">my text2</div>
<!-- some other code follows -->
<div>
<p>stuff</p>
</div>
<p>
<span>Hello World</span>
</p>
<input type=""/>
<div class="myclass">my text3</div>
<!-- some other code follows -->
<div>
<p>stuff</p>
</div>
<footer>The end</footer>
J'ai la classe CSS div.myclass {doing things}
qui s'applique à tous, évidemment, mais je voulais aussi être en mesure de sélectionner le premier, le deuxième ou le troisième div de classe .myclass
comme ça, quel que soit l'endroit où ils sont dans le balisage:
div.myclass:first {color:#000;}
div.myclass:second {color:#FFF;}
div.myclass:third {color:#006;}
Presque comme du jQuery sélection d'index .eq( index )
, qui est ce que j'utilise actuellement, mais j'ai besoin d'un no-script alternative.
Pour être plus précis, je suis à la recherche pour les sélecteurs de pseudo, pas des choses comme l'ajout d'une autre classe ou à l'aide IDs pour faire fonctionner les choses.
- Comment au sujet de la CSS nth-child, avez-vous essayer ça....? Remarque: Cela fonctionne dans les navigateurs modernes seulement
- Cette note semble être synonyme de "Non SAVOIR".
- Et oui, vous l'avez droit 🙂
- Cela ne fonctionnera pas car il n'y a pas uniforme conteneurs parents, c'est pourquoi j'ai voulu choisir en fonction de la classe nom de l'événement plutôt. Il faudrait que je regarde à chaque instance et de trouver la balise parent,id ou une classe afin de sélectionner l'enfant. De faire qui ne me donne pas l'uniformité et est difficile à lire et aurait besoin d'être mis à jour si les objets parent/modification des attributs.
- nth-child est maintenant pris en charge par IE 9+.
Vous devez vous connecter pour publier un commentaire.
Vous avez probablement enfin compris cela entre l'affichage de cette question et d'aujourd'hui, mais la nature même de sélecteurs fait qu'il est impossible de naviguer à travers hiérarchiquement sans rapport avec les éléments HTML.
Ou, pour le dire simplement, puisque vous l'avez dit dans votre commentaire que
... c'est juste pas possible avec les sélecteurs seul, sans modifier le balisage d'une certaine façon, comme indiqué par les autres réponses.
Vous ont d'utiliser le jQuery
.eq()
solution..eq()
fonctions, vous pouvez le faire tout beaux tout simplement JavaScript:document.querySelector(".myclass")[n]
où n est le nombre que vous voulezutilisation nth-child(numéro d'article)
EX
OU
:nth-of-type(numéro d'article)
même votre code
Oui, vous pouvez le faire. Par exemple, pour style les balises td qui composent les différentes colonnes d'un tableau, vous pouvez faire quelque chose comme ceci:
Ce n'est pas tellement une réponse comme une non-réponse, c'est à dire un exemple montrant pourquoi l'un des très voté les réponses ci-dessus est en fait mal.
J'ai pensé que la réponse avait l'air bien. En fait, il m'a donné ce que je cherchais:
:nth-of-type
qui, pour ma situation, travaillé. (Oui, merci, @Bdwey.)J'ai d'abord lu le commentaire de @BoltClock (qui dit que la réponse est essentiellement mauvais) et il a rejeté, j'avais vérifié mon cas d'utilisation, et cela a fonctionné. Puis j'ai réalisé @BoltClock avait une réputation de 300 000+(!) et a un profil où il prétend être un gourou CSS. Hmm, j'ai pensé que, peut-être que je devrais regarder un peu plus près.
S'avère comme suit:
div.myclass:nth-of-type(2)
ne signifie PAS "le 2ème exemple de div.myclass". Plutôt, cela signifie "la 2ème exemple de div, et il doit également avoir la "myclass " classe". C'est une distinction importante lorsqu'il y a interventiondiv
s entre votrediv.myclass
instances.Il m'a fallu un certain temps pour obtenir ma tête autour de cela. Ainsi, pour aider les autres à comprendre plus rapidement, j'ai écrit un exemple qui, je crois, explique le concept plus clairement que d'une description écrite: j'ai détourné le
h1
,h2
,h3
eth4
éléments essentiellementdiv
s. J'ai mis unA
classe sur certains d'entre eux, regroupés en 3, puis colorée à la 1ère, 2ème et 3ème cas le bleu, l'orange et le vert à l'aideh?.A:nth-of-type(?)
. (Mais, si vous lisez attentivement, vous devriez vous demander "à la 1ère, 2ème et 3ème instances de quoi?"). J'ai également intervenu un dissemblables (c'est à dire les différentsh
niveau) ou similaires (à savoir les mêmesh
niveau) de l'onu-classés élément dans certains de ces groupes.Note, en particulier, le dernier regroupement de 3. Ici, une liste non-classé
h3
élément est inséré entre le premier et le deuxièmeh3.A
éléments. Dans ce cas, pas de 2ème couleur (c'est à dire orange) s'affiche, et la 3ème couleur (vert) s'affiche sur le 2ème instance deh3.A
. Cela montre que lan
dansh3.A:nth-of-type(n)
est le comptage duh3
s, pas lah3.A
s.Bien, espérons que cette aide. Et merci, @BoltClock.
CSS:
HTML:
Peut-être en utilisant le "~" sélecteur de CSS?
Voir mon exemple sur jsfiddle