Jquery Queue()每个()都带有Delay()

时间:2011-01-13 16:44:26

标签: javascript jquery arrays loops

我有一个数组:result [i]。我想遍历数组中的每个字段并将其附加到我页面中的元素。

$("tr:first").after(result[i]);

但我希望这会延迟发生。

一直试图解决队列如何处理每个循环和延迟,但我似乎无法解决它。我可以得到一个延迟,但只有在它们全部附加之前。

提前致谢。

4 个答案:

答案 0 :(得分:7)

尝试queue

$.each(result, function(idx, val) {
    $("tr:first").delay(1000).queue(function(next) {
        $(this).after(val);
        next();
    });
});

要完成,这是针对jQuery 1.4的。在早期版本中,回调应如下所示:

function() {
    // do whatever here
    $(this).dequeue();
}

答案 1 :(得分:2)

看,递归的力量:

(function append(i) {
  if (i >= result.length) return;
  $('tr:first').after(result[i]);
  setTimeout(function(){append(i+1)},1000);
})(0);

您可以添加额外的setTimeout,具体取决于您是需要立即显示第一项还是延迟后显示。

答案 2 :(得分:1)

$(result).each(function(i) {
    $("tr:first").delay(1000).after(result[i]);
});

答案 3 :(得分:1)

另一种处理方法是循环结果数组并设置一堆setInterval或.delay()函数调用,延迟根据数组索引而变化。例如:

for( var i = 0; i < result.length; i++ ){
  $('tr:first').delay(i*1000).after(result[i]);
}

可以肯定的是,这个解决方案不如上面@Victor提供的递归解决方案,但如果您不喜欢任何原因的递归,这是另一种方法。