检查是否所有div都被隐藏

时间:2012-03-08 20:25:14

标签: jquery

JSFIDDLE

$(document).ready(function() {
    $(".chk").click(function() {
        $(".chk:checked").each(function() {
           $("."+this.id).show();
        });       
        $(".chk:not(:checked)").each(function() {
           $("."+this.id).hide();
        }); 
        // give a message if nothing left to show       
    });  
}); 

<label>
    <input class="chk" type="checkbox" checked="checked" id="course">Courses
</label> 
<label>
    <input class="chk" type="checkbox" checked="checked" id="morning">Morning
</label> 
<label>
    <input class="chk" type="checkbox" checked="checked" id="evening">Evening
</label> 
<ul>
    <li class="courseBox course">Course</li>
    <li class="courseBox course evening">Course, Evening</li>
    <li class="courseBox morning">Morning </li>
</ul>​

我如何最优雅地知道所有受影响的div是否都被隐藏了?


更新:如果您需要在fadeOut之后进行检查,则需要将检查放入回调中:

$(".chk:not(:checked)").each(function() {
  $("."+this.id).fadeOut(function() {
    if (!$('.courseBox:visible').length) {
      alert('all are hidden');
    }
  });
}); 

5 个答案:

答案 0 :(得分:4)

if (!$('.courseBox:visible').length)
    alert('all are hidden');

http://jsfiddle.net/JrAhR/6/

答案 1 :(得分:2)

您需要:visible选择器:

if ($('div:visible').length == 0) alert('no more divs!');

答案 2 :(得分:2)

计算可见的li元素:

 if ($('ul li:visible').length == 0) {
  alert("Everything is gone!")
 }

更多信息:

:visible selector

答案 3 :(得分:0)

你可以试试这个:

$('ul').find(':hidden').length

这将为您提供&#34; ul&#34;下的元素数量。隐藏的

答案 4 :(得分:0)

您的代码可以简化如下。

$(document).ready(function() {
    $(".chk").click(function() {
        $("." + this.id).toggle(this.checked);
        if($(".courseBox:visible").length == 0){
            alert("All divs are hidden");
        }
    });        
});   

工作演示 - http://jsfiddle.net/ShankarSangoli/JrAhR/13/