2010-08-13 11 views
1

Par exemple, je dois le faire manuellement comme ceci:Vérifiez tous les divs ont la même classe ou non

function checkDivUppersClosed() { 
    var allOpened = true; 
    $('.classUpper').each(function (index, domEle) { 
     allOpened &= $(this).parent().hasClass('closed'); 
    }); 
    return allOpened;   
} 

Je sais que si je sélectionne $('.closed').size() retournera la longueur ainsi. Mais dans mon cas, certains divs ont la classe classUpper mais pas du tout.

+0

Est-ce que '.closed' représente être caché? Si c'est le cas, vous pouvez raccourcir ce * beaucoup *, par exemple '$ ('. ClassUpper: visible'). Length === 0' signifierait qu'ils sont tous fermés. –

+1

Donc, vous voulez juste tous les divs qui ont un cours commun? Ou, comme le titre l'indique, vous voulez savoir si tous les divs ont la même classe, et retourner quoi? Il semble à partir de votre extrait de code que vous recherchez l'ancien. –

+0

D'accord avec James - pouvez-vous rendre cette question un peu plus claire? Exactement ce que vous essayez d'accomplir? Exemple de balisage pourrait aider aussi. –

Répondre

3

Pour faire la version littérale de votre vous pouvez le faire contrôler le courant:

return $('.classUpper').parent(':not(.closed)').length; 

Cela retournerait le nombre qui ne sont pas fermés (les parents de ces éléments que :not() ont la classe closed). Vous pouvez utiliser le nombre comme un vrai/faux vérifier encore, ou ajouter un === 0 pour être explicite.

Bien que si la classe closed est ajoutée pour les cacher, vous pouvez utiliser le sélecteur :visible, comme ceci:

return $('.classUpper:visible').length === 0; 
+0

sont '.size()' et '.length' la même chose? Je pensais que jQuery avait seulement '.size()' et les tableaux avaient '.length'? –

+0

@Bob - Un objet jQuery * est * un tableau d'éléments DOM, si vous [regardez dans la source] (http://github.com/jquery/jquery/blob/master/src/core.js#L180), un appel à '.size()' est juste un wrapper à '.length' :) –

+0

Je sais qu'il a un tableau d'éléments dom à l'intérieur, mais je pensais que la longueur était privée, je ne savais pas que la propriété était maintenu par le code de jQuery –

-1

Pourquoi ne pas:

$('.classUpper .closed') 
+0

Cela vérifie les deux classes sur l'élément * same *, il vérifie une classe sur l'enfant, une autre sur le parent. –

+0

Bon point! Édité. –

+0

@Bobby - Maintenant, il vérifie un * enfant * de classe, plutôt que d'un parent :) –

-1

Si vous voulez juste d'effectuer une opération sur certains éléments qui correspondent à vos critères vous peut utiliser:

$('.classUpper.closed') 
+0

Ce n'est pas la structure avec laquelle le questionneur travaille, comme Nick l'a souligné (c'est une question très confuse!). Je pense que la structure est quelque chose comme: