Javascript 当循环调用setTimeout时不工作

Javascript 当循环调用setTimeout时不工作,javascript,jquery,Javascript,Jquery,我有一组带有编号Id的,我想将类添加到,Id=1等待3秒删除类,然后将类添加到等等 如何让这段代码工作虽然循环无法调用设置超时有人能帮忙吗 var spanSet = 4; var spanId = 1; while (spanSet != 0) { changeClass(); spanSet--; } function changeClass() { $('#' + spanId).addClass("hilite"); setTimeout(remove,

我有一组带有编号Id的
,我想将类添加到
,Id=1等待3秒删除类,然后将类添加到
等等

如何让这段代码工作
虽然
循环无法调用
设置超时
有人能帮忙吗

var spanSet = 4;
var spanId = 1;
while (spanSet != 0) {
    changeClass();
    spanSet--;
}

function changeClass() {
    $('#' + spanId).addClass("hilite");
    setTimeout(remove, 1000);
    spanId++;
}

function remove() {
    alert('remove');
    $('#' + spanId).removeClass("hilite");
    return true;
}
检查代码中实际发生了什么

移除
while
循环,并按如下方式进行设置(请参阅):

var spanId=1;
changeClass();
函数changeClass(){
$('#'+spanId).addClass(“hilite”);
spanId+=1;
设置超时(删除,500);
}
函数删除(){
$('#'+(spanId-1)).removeClass(“hilite”);

如果(spanId,使用jQuery动画函数,这将是最简单的

这就是所需要的:

var spanId = 1;

(function hilite() {
    $('#' + spanId).addClass('hilite').delay(3000).queue(function() {
        $(this).removeClass('hilite').dequeue();
        if (++spanId < 5) {
            hilite();
        }
    });
})();

注意:数字ID是HTML5的东西。CSS也不支持它们。

为什么不在while标题中使用
spanId
(而不是
spanSet
)?这就是为什么问题应该描述你正在尝试做什么,而不是你认为什么是错误的。TJC有一个正确的想法…循环中的超时。逻辑上有些错误。spanId没有保留。这似乎与你的有关。请记住,这不是拥挤调试/开发代码的地方。用更多细节更新问题
 var spanId=1;changeClass();function changeClass(){$('#'+spanId).addClass(“hilite”);setTimeout(remove,3000);//我想你是说3000?}function remove(){spanId++$('#'+spanId).removeClass(“hilite”);if(spanId)这比我的要好。更像jQuery。
var spanId = 1;

(function hilite() {
    $('#' + spanId).addClass('hilite').delay(3000).queue(function() {
        $(this).removeClass('hilite').dequeue();
        if (++spanId < 5) {
            hilite();
        }
    });
})();
(function hilite(a) {
    $(a.shift()).addClass('hilite').delay(3000).queue(function() {
        $(this).removeClass('hilite');
        if (a.length) {
            hilite(a);
        }
    });
})(['#1', '#2', '#3', '#4']);