【发布时间】:2011-06-08 15:10:41
【问题描述】:
我有一个数组:result[i]。我想遍历数组中的每个字段并将其附加到我页面中的元素。
$("tr:first").after(result[i]);
但我希望延迟发生。
一直在尝试了解队列如何与每个循环和延迟一起工作,但我似乎无法解决。我可以延迟,但只能在它们全部附加之前。
提前致谢。
【问题讨论】:
标签: javascript jquery arrays loops
我有一个数组:result[i]。我想遍历数组中的每个字段并将其附加到我页面中的元素。
$("tr:first").after(result[i]);
但我希望延迟发生。
一直在尝试了解队列如何与每个循环和延迟一起工作,但我似乎无法解决。我可以延迟,但只能在它们全部附加之前。
提前致谢。
【问题讨论】:
标签: javascript jquery arrays loops
试试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();
}
【讨论】:
function(next) { after(val); next(); } 吗?
next 的东西。或者你是什么意思?
看,递归的威力:
(function append(i) {
if (i >= result.length) return;
$('tr:first').after(result[i]);
setTimeout(function(){append(i+1)},1000);
})(0);
您可以添加额外的 setTimeout,具体取决于您是需要立即出现还是延迟后出现第一项。
【讨论】:
0 的参数立即调用它。函数周围的 () 是为了确保它是一个匿名函数 - 否则,解析器可能会将其误认为是函数定义。
$(result).each(function(i) {
$("tr:first").delay(1000).after(result[i]);
});
【讨论】:
处理此问题的另一种方法是循环遍历结果数组并设置一组 setInterval 或 .delay() 函数调用,延迟根据数组索引而变化。例如:
for( var i = 0; i < result.length; i++ ){
$('tr:first').delay(i*1000).after(result[i]);
}
可以肯定的是,这不像上面@Victor 提供的递归解决方案那么好,但这是另一种方法,以防您出于任何原因不喜欢递归。 p>
【讨论】:
i 的作用域规则,使用$.each() 比for 循环更安全
$.each() 来进行数组跨越,所以我不会想立即写出使用它的代码。 =)