Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何按顺序将类添加到元素集合中?_Javascript_Jquery - Fatal编程技术网

Javascript 如何按顺序将类添加到元素集合中?

Javascript 如何按顺序将类添加到元素集合中?,javascript,jquery,Javascript,Jquery,我试图为集合中的每个元素添加一个类。我想向元素添加一个类,然后等待一两秒钟,然后将该类添加到集合中的下一个类 但当我使用这段代码时,它只是将类一次添加到每个类中 for (var i = 0; i < article.length; i++) { setTimeout(function () { $(article[i]).addClass('something'; }, 10000); } 问题是,您正在设置一组从同一时刻开始10秒的超时

我试图为集合中的每个元素添加一个类。我想向元素添加一个类,然后等待一两秒钟,然后将该类添加到集合中的下一个类

但当我使用这段代码时,它只是将类一次添加到每个类中

for (var i = 0; i < article.length; i++) {
    setTimeout(function () {
        $(article[i]).addClass('something';
        }, 10000);
    }

问题是,您正在设置一组从同一时刻开始10秒的超时,因此它们将在10秒后立即执行。您需要将它们链接在一起,以便每个超时处理程序调用下一个超时:

var i = 0;
var callback;

callback = function () {
    if (i < article.length) {
        $(article[i]).addClass('something');

        ++i;
        setTimeout(callback, 10000);
    }
};

setTimeout(callback, 10000);

试着这样做:

 (function step(i){         
     if( i < article.length ){
          $(article[i]).addClass('some_class');
          setTimeout(function(){ step(i+1) },10000);
     }         
 })(0);
你可以用

var x = setInterval("javascript",ms);
它会在每毫秒反复调用代码部分中的任何内容,直到调用

clearInterval(x);

函数

一种无需链接调用的方法:

for (var i = 0; i < article.length; i++) {
    (function(_i) {
    setTimeout(function () {
        $(article[_i]).addClass('something');
    }, 10000+_i*1000);
    })(i);
}

添加CSS类的开销不太可能大到足以使其无法按预期运行。

使用$代理步骤,null,i+1,可以保持优雅,而不会欺骗不缩进函数:P@Esailija我不认为使用$.proxy更优雅。它们是扭转这种效应的一种方法吗?那么从最后一个开始移除类?谢谢。@mtwallet是的,使用var i=article.length-1;相反,对于条件,使用i>=0而不是i