2009-08-03 14 views
14

Come verifico se tutti i div con test di classe sono nascosti. E se sono tutti nascosti, imposta wrap1 su hidden. Grazie.Usa jQuery per controllare se tutte le div sono nascoste

<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: Grazie a tutti per le risposte molto veloce, ho capito di lavoro. Erano tutti molto utili.

+0

Qualcuno può modificare il titolo della domanda? Stavo cercando "tutti i div con la stessa classe" e ho quasi superato questo problema di upvoting – Jason

risposta

33

È possibile fare il check in, utilizzando il selettore come suggerito sopra e in questo modo:

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

Puoi anche cambiare 'if ($ (" div. test: visible "). length === 0)' linea a 'if (! $ (" div.test: visible "). length)'. –

0

Un modo migliore per vedere se sono tutti visibili è il conteggio per la visibilità uguale al conteggio totale.

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

È necessario qualificarlo con il test di classe appropriato. nascosto se i DIV "testN" sono nascosti anche se il DIV "header" non lo è. – tvanfosson

7

Questo frammento di codice in loop tutto <div id="wrap#"> e nasconderle se il test sono nascosti.

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

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

Se si vuole ancora mantenere la vostra <div id="wrap#"> visibile se non ci sono nessun test a tutti (come in nessuno nel codice), è possibile utilizzare il seguente frammento modificato:

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

Non c'è motivo convincente per classificare le classi (tranne che nei casi limite). La tua numerazione complica il codice di cui sopra così come il tuo CSS. Sarebbe più semplice rimuovere la numerazione da test. (Non è necessario come si può sempre selezionare un sottoinsieme di loro utilizzando :lt(index), :gt(index), :eq(index), :first e :last.

Per quanto riguarda gli ID di numerazione, va bene dal momento che ogni id deve essere unico.

+0

Si noti che questo nasconderebbe anche il div wrapper se non ci fossero div con una classe corrispondente. Non sono sicuro se questo è il comportamento desiderato o meno. – tvanfosson

+0

** @ tvanfosson: ** Tecnicamente se non ci sono 'div.test' nel markup, è come se non fosse visibile' div.test'. Sono abbastanza sicuro del comportamento desiderato. –

+0

Se si desiderava solo il comportamento in presenza di div, ma erano tutti nascosti, è possibile verificare che: il conteggio nascosto sia uguale al: conteggio visibile. – tvanfosson

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