.each()找到最后一项并创建一个if语句



我有以下jQuery,

function animTweets($tweets) {
    $tweets.each(function () {
        var $tweet = $(this);
        $('#twitterTile').queue('myQueue', function (next) {
            $tweet.animate({top: 0, height: 'show'},
                        {duration: 300,
                         queue: false,
                         complete: next
                        });
        }).delay(1E10, 'myQueue');
    });
}

遍历列表($tweets)中包含的项。

如何创建if语句,使最后一项具有不同的动画?

$tweets.each(function (index) {
    if(index == $tweets.length-1) {
    //special behavior
    }
});

您可以使用.length获得tweet的总数,然后使用.each()暴露的index检查它是否当前的index是最后一个:

function animTweets($tweets) {
    var total = $tweets.length;
    $tweets.each(function (index, obj) {
        var $tweet = $(this);
        if ((index + 1) == total) {
            //this is the last one
        } else {
            $('#twitterTile').queue('myQueue', function (next) {
                $tweet.animate({top: 0, height: 'show'},
                            {duration: 300,
                             queue: false,
                             complete: next
                            });
            }).delay(1E10, 'myQueue');
        }
    });
}

Docs for .each(): http://api.jquery.com/each

function animTweets($tweets) {
    var len =  $tweets.length;
    var count = 1;
    $tweets.each(function () {
        var $tweet = $(this);
        if(len  == count ){
           //different anim
        }else{
          $('#twitterTile').queue('myQueue', function (next) {
             $tweet.animate({top: 0, height: 'show'},
                        {duration: 300,
                         queue: false,
                         complete: next
                        });
          }).delay(1E10, 'myQueue');
        }
        count++;
    });
}

如何使用.slice() <一口>[医生].last() <一口>[医生]:

$tweets.slice(0, -1).each(...);
var $lastTweet = $tweets.last();
// do something with the last tweet.

有时我们忘记了.each()并不总是比老式的for循环好,因为我们失去了对迭代的控制。假设animTweets的参数是jQuery对象,您可以像这样使用for循环:

function animTweets($tweets) {
    var $tweet;
    for (var i = 0, len = $tweets.length - 1; i < len; i++) {
        $tweet = $tweets.eq(i);
        $('#twitterTile').queue('myQueue', function (next) {
            $tweet.animate({top: 0, height: 'show'},
                        {duration: 300,
                         queue: false,
                         complete: next
                        });
        }).delay(1E10, 'myQueue');
    }
    // now process the last one separately
    tweet$ = $tweets.eq(-1);
    // ...
}

最新更新