2009-08-03 56 views
14

我该如何检查是否所有div的类测试都是隐藏的。如果他们全部隐藏设置wrap1隐藏。谢谢。使用jQuery检查是否所有的div都隐藏了

<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: 感谢大家真正快速解答,我懂了工作。他们都非常有帮助。

+0

有人可以编辑问题标题吗?我正在寻找“所有div都是同一个类”,并且几乎通过了这个问题。Upvoting question。 – Jason 2017-09-21 17:10:10

回答

33

你可以做检查用如上述,并像这样的建议使用选择:

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

你也可以改变`if($(“div。测试:可见“)。长度=== 0)'行'if(!$(”div.test:visible“)。length)`。 – 2018-01-12 15:16:43

0

更好的方法来查看它们是否全部可见是可见性计数与总计数相同。

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

您需要使用适当的类测试来验证它。根据OP,包装应该是隐藏如果“testN”分类的DIV被隐藏,即使“header”DIV不是。 – tvanfosson 2009-08-03 15:28:05

7

该片段将循环中的所有<div id="wrap#">并隐藏他们,如果测试是隐藏的。

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

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

如果你仍然想保持你<div id="wrap#">可见,如果有根本没有测试(如没有在标记),您可以使用以下修改的摘录:

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

没有数字类的强制性理由(边缘情况除外)。你的编号和上面的代码以及你的CSS一样复杂。只需从test中删除编号就更容易了。 (你不需要它,你可以使用:lt(index):gt(index):eq(index):first:last总是选择其中的一个子集。

至于编号标识,这很好,因为每个ID必须是唯一的。

+0

请注意,如果没有包含匹配类的div,这也会隐藏包装div。不知道这是否是所需的行为。 – tvanfosson 2009-08-03 15:21:29

0
jQuery("#wrap1").find("div").each(function() 
    { 
     if ($(this).is(':hidden')) 
     { 
     } 
    } 
); 
相关问题