JQuery使用范围命名函数

时间:2012-09-18 21:23:30

标签: javascript jquery

我需要在页面上的一组相邻DIVS上执行单个函数。我认为这样做最好:

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

}

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

但我找不到在设定范围(firstdiv对象)中任意执行函数的方法,而且我甚至不确定范围是否会正确传递。有没有办法做到这一点,或者更好的方法来做到这一点?

3 个答案:

答案 0 :(得分:1)

我想你想要这个:

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

然后:

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

答案 1 :(得分: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/

答案 2 :(得分:-1)

也许这个?

$("#firstdiv").nextAll("div").andSelf().each(function(){
    // this = DIV
});