4

我有一个填充了各种元素的对象,我希望使用这些元素进行迭代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并继续无限循环。

4

3 回答 3

9

如果你使用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); 
于 2012-09-25T18:13:52.393 回答
4

jQuery 的.each(...)方法将“当前”元素(及其索引)传递给回调。this当您不需要做任何太复杂的事情时,这只是一种方便。

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

上面,当前元素在 setInterval 回调中可用current,例如。请注意,此元素按原样以其“原始”形式传递this,因此如果您想在其上调用 jQuery 方法,则需要以相同的方式包装它,即:$(current).

于 2012-09-25T18:11:52.713 回答
2

用那个。

$(arts).each(function(){
    var that = this;
    setInterval(function() {
    // in here perform an action on the current element in 'arts'
         doSomethingWith(that)
    }, 2000);   
});
于 2012-09-25T18:05:36.717 回答