0

次のコードを使用して、一連の要素を循環させていました。

$(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>
4

1 に答える 1

4

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);
于 2011-06-24T14:31:59.917 に答える