0

这是检查 div 是否隐藏 && 具有“视图”类的正确 jQuery 语法吗?如果是这样,那么在 0.3 秒后显示下一个具有“视图”类的隐藏 div?

请注意,它目前不起作用,它会在所有隐藏的 div 中消失,无论类如何。

<script type="text/javascript">
            $(function() {
                // Start showing the divs
                showDiv();
            });

            function showDiv() {
                // If there are hidden divs left
                if($('div:hidden').length.hasClass('view')) {
                    // Fade the first of them in
                    $('div:hidden:first').fadeIn();
                    // And wait one second before fading in the next one
                    setTimeout(showDiv, 300);
                }
            }
    </script>
4

4 回答 4

4

可能更好的解决方案是

if($('div.view:hidden').length) {
  // Fade the first of them in
  $('div.view:hidden:first').fadeIn();
  // And wait one second before fading in the next one
  setTimeout(showDiv, 300);
}
于 2012-07-09T21:09:42.543 回答
2
// get all hidden divs with a class of view
var $hiddenViewDivs = $('div.view:hidden');
// if there are any...
if ($hiddenViewDivs.length) { 
    // get the first one and invoke fadeIn() on it
    $hiddenViewDivs.first().fadeIn(); 
    // And wait one second before fading in the next one
    setTimeout(showDiv, 300);
}

我将解释您的代码在做什么(请参阅我的新评论,周围有星星):

// **Get the length (count) of all hidden divs and invoke hasClass('view') on that number (will throw an error)**
if($('div:hidden').length.hasClass('view')) {
    // **Get the first hidden div and invoke fadeIn() on it, regardless of if it has a class of view or not**
    $('div:hidden:first').fadeIn();
    // And wait one second before fading in the next one
    setTimeout(showDiv, 300);
}

编辑(替代解决方案):

此解决方案的优点是您不必一直$('div.view:hidden')在 DOM 中查找。在这里,你得到它一次,安抚表演之神。

function showDiv() {
    var $hiddenViewDivs = $('div.view:hidden');
    var i = 1;
    $hiddenViewDivs.each(function(){
        (function($target){ 
            setTimeout(function(){$target.fadeIn();}, 300*i);
        })($(this));
        i++;
    });
}​

示例:http: //jsfiddle.net/lbstr/LdzYm/

于 2012-07-09T21:09:54.173 回答
0

刚刚怎么样$('div.view:hidden').length

于 2012-07-09T21:10:31.533 回答
0
$('div.view:hidden:first').fadeIn(function() {
   setTimeout(showDiv, 300); 
});

你不需要if。jQuery 会为你解决这个问题。

于 2012-07-09T21:32:28.017 回答