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
}

或者您可以将动画或其他 div 处理代码直接放在该processNextDiv()函数中,具体取决于您是否希望能够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 回答