плагин не работает, как я ожидал - PullRequest
0 голосов
/ 24 июня 2011

Я использовал следующий код для циклического перемещения по набору элементов.

$(this).next().show().animate({top: '25px'},250,function(){
                $(this).addClass('active');
            });

, но это было ограничено, так как мне нужно было добраться до конца списка элементов и повторить цикл снова, поэтомуЯ написал этот плагин:

(function($){
    $.fn.extend({
        rotater: function(class_check){
            return this.each(function(){
                if($(this).next().hasClass(class_check)){

                    return $(this).next();
                } else {

                    return $(this).parent().children().first();
                }
            });
        }
    });
})(jQuery);

Чтобы определить, когда я достиг конца желаемого набора (у всех из которых есть общий класс), и если это так, возьмите первый объект, в котором можно начать всецикл снова.

Я изменил код вызова на:

$(this).rotater('common_class').show().animate({top: '25px'},250,function(){
                $(this).addClass('active');
            }); 

, но он перестал работать полностью !!Я запутался, я мог понять, если мой сценарий «возврата к началу» не удался, но по крайней мере первый цикл должен вести себя точно так же, как next(), потому что я буквально возвращаю значение next().

Мой HTML выглядит так:

<div id="parent>
  <div class="common_class"></div>
  <div class="common_class"></div>
  <div class="common_class"></div>
  <div class="common_class"></div>
  <div class="undesired_elemement"></div>
</div>

1 Ответ

4 голосов
/ 24 июня 2011

Возврат в each обратном вызове не имеет никакого эффекта. Ваша функция ротатора возвращает то, что возвращает each, и это не то, что возвращает обратный вызов, но снова возвращает this.

Решение: не использовать each:

(function($){
    $.fn.extend.rotater = function(class_check){
        if(this.next().hasClass(class_check)){
            return this.next();
        else {
            return this.parent().children().first();
        }
    }
})(jQuery);

Вы должны использовать this.each, только если хотите применить функциональность ко всем элементам, выбранным селектором.

Возможно, у вас странное поведение, если выбрано более одного элемента. В этом случае вы должны явно выбрать первый элемент:

var ele = this.eq(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...