1

ページ上の一連の隣接する DIVS に対して単一の関数を実行する必要があります。私はそれが次のように最もうまくいくと思いました:

function namedFunction(){
   setTimeout(3000);
   //do animations and such
   $(this).next().call(namedFunction);

}

$("#firstdiv").call(namedFunction());

しかし、設定されたスコープ (firstdiv オブジェクト) で関数を任意に実行する方法が見つかりません。さらに、スコープが正しく渡されるかどうかもわかりません。これを行う方法、またはこれを行うより良い方法はありますか?

4

3 に答える 3

1

私はあなたがこれを望んでいると思います:

function namedFunction () {
   this.animate({ ... }, function () {
       namedFunction.call( $( this ).next() );
   });    
}

その後:

namedFunction.call( $('#firstdiv') );
于 2012-09-18T21:33:59.780 に答える
0

関数は現在の実行を一時停止しません。setTimeout()指定した関数の将来の実行をキューに入れます。ページの読み込み時に何かを行うには、ドキュメント対応ハンドラーを使用します。

私はあなたがこのようなものが欲しいと思います:

$(document).ready(function() {
    var $divs = $("div.commonClass"),
        i = 0;
    function processNextDiv() {
        namedFunction($divs.eq(i));
        i = (i + 1) % $divs.length;
        setTimeout(processNextDiv, 3000);
    }
    processNextDiv();
});

これは最初にすべての div を選択し (それらに共通のクラスを与えることをお勧めしますが、好きな方法でそれを行うことができます)、namedFunction()処理する現在の div を渡すことを呼び出すタイムアウトベースのループを設定します。したがって、次のことができます。

function namedFunction($div) {
    $div.animate(...); // process current div
}

processNextDiv()または、他の場所から呼び出すことができるようにするかどうかに応じて、アニメーションまたはその他の div 処理コードをその関数に直接配置することもできnamedFunction()ます。

デモ: http://jsfiddle.net/hWLTb/

于 2012-09-18T21:40:37.390 に答える
-1

もしかしてこれ?

$("#firstdiv").nextAll("div").andSelf().each(function(){
    // this = DIV
});
于 2012-09-18T21:40:10.400 に答える