.each()的jQuery自定义顺序

时间:2012-08-03 15:02:19

标签: jquery each

我成功地使用.each()逐个淡出一些块。正如预期的那样,它从第一个元素开始,然后按顺序移动到下一个元素。

有没有办法控制.each()的顺序?而不是1,2,3,4等,我想,例如,1,2,5,9,6,3,4,7,8。

$(window).load(function() {
    $(".blocks").each(function(i) {
       $(this).delay((i + 1) * 500).fadeIn(500);
    });
});

3 个答案:

答案 0 :(得分:4)

在直接回答您的问题时,.each()按照项目在jQuery内部数组中的顺序迭代jQuery对象的项目。除了更改它迭代的数组中的顺序之外,无法控制.each()使用的顺序。

由于您没有披露如何通过算法确定所需的订单,您的选择是:

  1. 在调用.each()之前对数组进行排序
  2. .each()致电
  3. 之前手动创建所需的订单
  4. .each()调用
  5. 之前正确排序数组的其他一段代码

    在您的代码片段的特定实例中,您可以通过创建查找表来重新排序.each()或重新排序数组,从而以不同的方式解决它,该查找表将查找给定数组索引的所需延迟值。

    $(window).load(function() {
        var delayLookup = {1:1,2:2,5:3,9:4,6:5,3:6,4:7,7:8,8:9};
        $(".blocks").each(function(i) {
           var delayTime = delayLookup[i] || i;
           $(this).delay(delayTime * 500).fadeIn(500);
        });
    });
    

答案 1 :(得分:1)

您没有说明订单的逻辑是什么。如果你的意思是随机的,你可以这样做:

$('.blocks')
    .sort(function(item) { return Math.floor(Math.random() * 2) === 1; })
    .each(function(i) {
        $(this).delay((i + 1) * 500).fadeIn(500);
    });

答案 2 :(得分:0)

首先必须按照自己想要的方式对数组进行排序,这里似乎是一个非常随机的排序,所以你必须手动创建一个数组并填充元素。然后你可以调用每个函数。