2010-08-25 7 views
3

En utilisant JQuery, comment sélectionner tous les éléments de classe x dans un élément avec id y?Aide du sélecteur JQuery

+0

Que voulez-vous faire avec ces éléments? Il suffit de les sélectionner? – Catfish

+0

Un id ne devrait-il pas toujours être unique? – drummondj

+0

@Catfish Non, mais je sais comment faire le reste. Je suis juste confondu avec le choix. – dmr

Répondre

6

Sélection de tous les descendants avec la classe x d'un élément avec l'identifiant "y".

$("#y .x").each(function() { 
    $(this) <- your element 
}); 

Sélection de tous les enfants avec la classe x d'un élément avec l'ID "y".

$("#y > .x").each(function() { 
    $(this) <- your element 
}); 
+1

Le premier code est le même que '$ ("#y"). find (". x") 'et le second est identique à' $ ("# y"). find ("> .x") ' – BrunoLM

+0

@BrunoLM +1 Bon ajout, je préfère ma méthode, cependant. En outre, s'il veut faire ex '.click' à la place, alors' .each' est retiré de toute façon. –

5

$('#y .x') devrait le faire pour vous.

Notez que ceci sélectionnera tous les descendants avec la classe x, pas seulement les enfants.

+1

+1 pour les descendants contre les enfants –

+0

+ 1 pour la brièveté (Ironique que je ne peux pas mettre cela comme un commentaire: "Les commentaires doivent avoir au moins 15 caractères.") – Homer

4
$("#x .y").doSomething(); 

$(".y", "#x").doSomething(); 

$("#x").find(".y").doSomething(); 

Et pour les enfants immédiats:

$("#x > .y").doSomething(); 

$("#x").children(".y").doSomething(); 

Jetez un oeil à ma question ici, il vous dit un peu plus et il couvre la performance. What is the fastest method for selecting descendant elements in jQuery?

+1

+1 - Réponse complète. Je pensais juste que dans votre second exemple, vous n'avez pas besoin de passer un objet jQuery pour le contexte. Vous pouvez juste passer la chaîne '" #x "'. jQuery le retourne dans votre troisième version dans les coulisses. : o) – user113716

+0

Ha! Je me demandais vraiment à ce sujet. Merci @patrick! – Marko

1

Si vous avez élément 1 avec id = « y » et que vous voulez tout ce qu'il est [immédiate] les enfants qui ont une classe = « x »

$("#y > .x").each(function(){stuff]); 

Si vous voulez que tous les descendants de id = » y »(pas seulement immédiat) vous ferait:

$("#y").find(".x").each(function(){stuff}); 

de toute évidence, vous pouvez le rendre plus intelligent (et mieux) en ajoutant les types d'éléments si vous savez ce qu'ils sont. Par exemple, si vous voulez seulement des enfants de type alors:

$("#y > a.x").each(function(){stuff]); 

Espérons que c'est ce que vous vouliez dire.

+0

L'utilisation de '.children()' ne vous donne pas tous les descendants. Juste immédiat. Vous pensez '.find()', qui retournera tous les descendants correspondants. – user113716

+0

woops - mon mauvais. Je vais éditer – patrickgamer