Вопрос по jquery, infinite-loop – JQuery бесконечный цикл через каждый div

4

У меня есть несколько 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);
});
публикация вашего текущего кода JQuery может помочь, если у вас уже есть метод для этого на один набор DIV с помощьюeach() для всех элементов класса "set" должен решить проблему, или я ошибаюсь? optimusprime619
все родительские divclass="set"? и когда вы говорите, что у вас будет «множество наборов элементов div, которые нужно зациклить независимо»; Вы говорите, что в то время как все наборы имеют родительский div сclass="set"количество комплектовn работать будет где-то от 1 доn? jimmym715

Ваш Ответ

3   ответа
0

Попробуй это:

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

setInterval(changeCurrent,timeInMillis);
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/

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);​
@ VisioN хорошая мысль. Я добавил вторую версию, которая не может синхронизироваться, а также более элегантна. редактировать: о, это почти точно ваша версия сейчас: P
Это прекрасно работает, и на самом деле кода меньше, чем мой оригинал. Удивительно! Спасибо! Dentor Uman
@ Энди Так же хорошо, как и я: D
Вы назначаете каждому.set новыйsetIntervalчерез пару минут синхронная работа закончится.

Похожие вопросы