jQuery无限循环遍历每个div

时间:2012-06-08 12:43:09

标签: jquery infinite-loop

我有一些带div的div,我想从当前的一个类中删除一个类,然后在下一个类中添加一个类。

然后当我到达最后一个时,我想回到起点并重新做一遍。

我已经有了这样做的方法,但它只适用于一组div,我将有许多需要独立循环的div。

以下是几个集合的示例(每个集合中会有随机数量的div):

<div class="set">
    <div class="current">Item1</div>
    <div>Item2</div>
    <div>Item3</div>
</div>


<div class="set">
    <div class="current">Item1</div>
    <div>Item2</div>
    <div>Item3</div>
    <div>Item4</div>
    <div>Item5</div>
</div>

我需要删除当前的类,并将其添加到每个集合中的下一个div,依此类推。

以下是我使用的一套代码:

$(function() {
    var items = $('.set div').length;
        current = 0;

    setInterval(function() {
        $('.set div').eq(current).removeClass('current');

        if (current == items - 1){
            current = 0;
        } else {
            current++;
        }

        $('.set div').eq(current).addClass('current');
    }, 500);
});

3 个答案:

答案 0 :(得分:9)

我的看法:

http://jsfiddle.net/yyY28/

$('.set').each(function(){
    (function($set){
        setInterval(function(){
            var $cur = $set.find('.current').removeClass('current');
            var $next = $cur.next().length?$cur.next():$set.children().eq(0);
            $next.addClass('current');
        },1000);
    })($(this));

});​

版本2:

​setInterval(function(){
    $('.set').each(function(){
        var $cur = $(this).find('.current').removeClass('current');
        var $next = $cur.next().length?$cur.next():$(this).children().eq(0);
        $next.addClass('current');
    });
},1000);​

答案 1 :(得分:2)

也许我没有把你弄好,但是你正在寻找?

function loop() {
    $(".set").each(function() {
        var current = $(this).children(".current").removeClass("current");
        var i = current.next().length ? current.index() : 0;
        current.siblings(":eq(" + i + ")").addClass("current");
    });
}

setInterval(loop, 500);​

DEMO: http://jsfiddle.net/jGcsh/

答案 2 :(得分:0)

试试这个:

function changeCurrent(){
    $('.set').each(function(){
        var currentSubDiv = $(this).children('.current');
        currentSubDiv.removeClass('current');
        currentSubDiv.next().addClass('current');
    })
}

setInterval(changeCurrent,timeInMillis);