使用setInterval jquery each()

时间:2012-09-25 18:03:57

标签: javascript jquery

我有一个填充了各种元素的对象,我希望使用each()进行迭代,然后对轮到它的元素执行操作。所以:

var arts = $("#press-sqs > article");
shuffle(arts);

$(arts).each(function(){
    setInterval(function() {
    // in here perform an action on the current element in 'arts'
    }, 2000);   
}); 

shuffle()是基本的随机播放功能)

我无法弄清楚如何将当前元素作为选择器进行访问并对其执行操作。 $(this)$(window)

最后,我需要该函数一旦到达art的末尾就再次开始迭代,并继续无限循环。

3 个答案:

答案 0 :(得分:10)

如果您使用的是setInterval,则会获得与订单交换相同的结果:

setInterval(function() {
    $(arts).each(function(){
         doSomethingWith(this);
    });   
}, 2000);

我认为你不想要你在这里做的事。我想你想要:

var i = 0;
setInterval(function() {
    var art = arts[i++];
    doSomethingWith(art)
    if(i >= arts.length) i = 0;
}, 2000); 

答案 1 :(得分:3)

jQuery的.each(...)方法将“current”元素(及其索引)传递给回调。 this只是在您不需要做太复杂的事情时提供便利。

$(arts).each(function(i, current){
    setInterval(function() {
    // in here perform an action on the current element in 'arts'
    }, 2000);   
});

在上面,当前元素在setInterval回调中可用作current。请注意,此元素以“原始”形式传递,如this所示,因此如果要在其上调用jQuery方法,则需要以相同的方式包装它,即:{{1} }。

答案 2 :(得分:2)

使用它。

$(arts).each(function(){
    var that = this;
    setInterval(function() {
    // in here perform an action on the current element in 'arts'
         doSomethingWith(that)
    }, 2000);   
});