Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery检查是否隐藏了所有div_Javascript_Jquery_Html_Css_Dom - Fatal编程技术网

Javascript 使用jQuery检查是否隐藏了所有div

Javascript 使用jQuery检查是否隐藏了所有div,javascript,jquery,html,css,dom,Javascript,Jquery,Html,Css,Dom,我如何检查是否所有带有类测试的div都被隐藏。如果它们都是隐藏的,则将wrap1设置为隐藏。谢谢 <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>&l

我如何检查是否所有带有类测试的div都被隐藏。如果它们都是隐藏的,则将wrap1设置为隐藏。谢谢

<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>
更新:
谢谢大家的快速回答,我成功了。它们都非常有用。

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

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

您可以使用上面建议的选择器进行检查,如下所示:

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

如果测试被隐藏,此代码段将循环所有测试并隐藏它们

$("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']").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变得复杂。从测试中删除编号会更容易。您不需要它,因为您总是可以使用:ltindex、:gtindex、:eqindex、:first和:last来选择它们的子集


至于id的编号,这很好,因为每个id都必须是唯一的。

注意,如果没有具有匹配类的div,这也会隐藏包装器div。不确定这是否是所需的行为。@tvanfosson:从技术上讲,如果标记中没有div.test,就等同于没有可见的div.test。我很确定这是你想要的行为。如果你只想在有div但它们都是隐藏的情况下使用这种行为,你可以检查以确保:hidden计数与:visible计数相同。@Andrew-我不确定。没有结果和所有结果都隐藏之间存在语义差异。我并不是说你的答案是错误的,只是指出行为不仅仅适用于“全部隐藏”的情况。@tvanfosson:无论如何,比较:隐藏长度和:可见长度可能不起作用,因为如果没有元素,两者都将返回0。你需要通过适当的类测试来验证这一点。根据OP,如果testN类DIV是隐藏的,即使header DIV不是,包装器也应该是隐藏的。有人可以编辑问题标题吗?我在找同一个班级的所有部门,差点错过了这个。向上投票问题。您还可以将if$div.test:visible.length==0行更改为if$分区测试:可见。长度。
jQuery("#wrap1").find("div").each(function()
   {
      if ($(this).is(':hidden'))
      {
      }
   }
);