2009-08-03 4 views
14

Wie würde ich prüfen, ob alle divs mit class test ausgeblendet sind. Und wenn sie alle versteckt sind, setze wrap1 auf hidden. Vielen Dank.Verwenden Sie jQuery, um zu überprüfen, ob alle divs ausgeblendet sind.

<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> 

UPDATE: Danke an alle für die wirklich schnelle Antworten, ich habe es funktioniert. Sie waren alle sehr hilfsbereit.

+0

Kann jemand den Fragetitel redigieren? Ich suchte nach "allen Divs mit derselben Klasse," und übergab fast dieses oben. Upvoting Frage. – Jason

Antwort

33

können Sie tun, um die Prüfung, durch den Wähler, wie oben und es wie folgt vorgeschlagen:

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

Sie können auch 'if ($ (" div. test: visible "). length === 0)' line zum 'if (! $ (" div.test: visible "). length)'. –

0

Bessere Art und Weise zu sehen, ob sie alle sichtbar sind, ist die Anzahl für Sichtbarkeit die gleiche wie die Gesamtzahl.

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

Sie müssen dieses mit dem zutreffenden Klassenversuch qualifizieren. Entsprechend dem OP sollte der Wrapper sein ausgeblendet, wenn die "testN" klassifizierten DIVs auch dann versteckt sind, wenn der "header" DIV nicht existiert. – tvanfosson

7

Dieser Code-Schnipsel in einer Schleife alle <div id="wrap#"> und sie verstecken, wenn der Test versteckt sind.

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

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

Wenn Sie noch Ihre <div id="wrap#"> sichtbar halten wollen, wenn es keinen Test überhaupt sind (wie in keiner im Markup), können Sie das folgende modifizierte Schnipsel verwenden:

$("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(); 
    } 
}); 

Es gibt keine zwingender Grund, Klassen zu nummerieren (außer in Randfällen). Ihre Nummerierung verkompliziert den obigen Code sowie Ihr CSS. Es wäre einfacher, einfach die Nummerierung von test zu entfernen. (Sie brauchen es nicht, wie Sie immer eine Teilmenge von ihnen mit :lt(index) auswählen können, :gt(index), :eq(index), :first und :last.

Wie für die Nummerierung ids, das ist in Ordnung, da jede ID muss eindeutig sein.

+0

Beachten Sie, dass dies auch das Wrapper-Div verbergen würde, wenn es keine divs mit einer passenden Klasse gäbe. Nicht sicher, ob das gewünschte Verhalten ist oder nicht. – tvanfosson

+0

** @ tvanfosson: ** Technisch gesehen, wenn es im Markup keinen 'div.test' gibt, ist es dasselbe, als wenn kein' div.test' sichtbar wäre. Ich bin mir ziemlich sicher, dass dieses Verhalten erwünscht ist. –

+0

Wenn Sie nur das Verhalten möchten, wenn divs vorhanden sind, aber alle ausgeblendet sind, können Sie überprüfen, ob die Anzahl der ausgeblendeten Zeichen der Anzahl der sichtbaren Zeichen entspricht. – tvanfosson

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