2009-08-03 8 views
14

Comment vérifier si tous les div avec test de classe sont cachés. Et s'ils sont tous cachés wrap1 cachés. Merci.Utilisez jQuery pour vérifier si toutes les div sont cachées

<div id='wrap1'> 
<div class="header">Header 1</div> 
<div class='test'><a href="#">Test 1</a></div> 
<div class='test'><a href="#">Test 2</a></div> 
<div class='test'><a href="#">Test 3</a></div> 
</div> 

MISE À JOUR: Merci à tous pour les réponses vraiment rapide, je l'ai eu de travail. Ils étaient tous très utiles.

+0

Quelqu'un peut-il éditer le titre de la question? Je cherchais "tous les div avec la même classe", et presque passé celui-ci upvoting question – Jason

Répondre

33

Vous pouvez faire la vérification que par l'aide du sélecteur comme suggéré ci-dessus et comme ceci:

if ($("div.test:visible").length === 0) 
     $("#wrap1").hide(); 
+0

Vous pouvez également changer 'if ($ (" div. test: visible "). length === 0)' ligne au 'if (! $ (" div.test: visible "). longueur)'. –

0

Un meilleur moyen de voir si elles sont toutes visibles est le nombre de visibilité identique au nombre total.

$("#wrap1 div:visible").length == $("#wrap1 div").length 
+0

Vous devez qualifier cela avec le test de classe approprié. caché si les DIVs "testN" classées sont cachées même si le DIV "header" n'est pas – tvanfosson

7

Cet extrait bouclera tous les <div id="wrap#"> et les cacher si le test sont cachés.

$("div[id^='wrap']").each(function() { 
    var wrap = $(this); 

    if(wrap.children("div[class^='test']:visible").length == 0) { 
    wrap.hide(); 
    } else { 
    wrap.show(); 
    } 
}); 

Si vous voulez garder votre <div id="wrap#"> visible s'il n'y a pas de test du tout (comme dans aucun dans le balisage), vous pouvez utiliser l'extrait modifié suivant:

$("div[id^='wrap']").each(function() { 
    var wrap = $(this); 

    if(wrap.children("div[class^='test']").length > 0 && 
    wrap.children("div[class^='test']:visible").length == 0) { 
    wrap.hide(); 
    } else { 
    wrap.show(); 
    } 
}); 

Il n'y a pas raison impérieuse de numéroter des classes (autres que dans les cas de bordure). Votre numérotation complique le code ci-dessus ainsi que votre CSS. Il serait plus facile de supprimer la numérotation de test. (Vous n'avez pas besoin que vous pouvez toujours sélectionner un sous-ensemble d'entre eux en utilisant :lt(index), :gt(index), :eq(index), :first et :last.

En ce qui concerne ids de numérotation, qui est très bien puisque chaque id doit être unique.

+0

Notez que cela masquerait également la div wrapper s'il n'y avait pas de div avec une classe correspondante. Je ne sais pas si c'est le comportement souhaité ou non. – tvanfosson

+0

** @ tvanfosson: ** Techniquement, s'il n'y a pas de div.test dans le balisage, cela revient à ne pas afficher div.test. Je suis assez sûr que le comportement désiré. –

+0

Si vous vouliez seulement le comportement quand il y avait des divs mais qu'ils étaient tous cachés, vous pouvez vérifier que le nombre: hidden est le même que le: visible count. – tvanfosson

0
jQuery("#wrap1").find("div").each(function() 
    { 
     if ($(this).is(':hidden')) 
     { 
     } 
    } 
); 
Questions connexes