javascript为setinterval动态更改表行背景颜色

时间:2013-09-16 13:16:56

标签: javascript jquery setinterval

我将行的背景动态更改为setinterval但不能正常工作。

如果单击该按钮,则将类名更改为表中的行。

我的代码:

HTML代码:

<table id="table">
<tr>
    <td>AAA11</td>
    <td>BBB11</td>
</tr>
..
..
</table>
<button id="btn">click</button>

CSS代码

.red { background-color: red; }

JS代码

var table = document.getElementById("table");
var rows = table.getElementsByTagName("tr");

//  My func
function func(){
    for (var i = 0; i < rows.length; i++) {
        var index=0;
        var c = rows[i].className;
            if(c!="red") {
                index=i;
            } else {
            index = i+1;
            }
        sec(index);
    } 
    setInterval(func(), 2000);   
}
// Change class name the rows 
function sec(index){
    for (var i = 0; i < rows.length; i++) {
        if(index==i) {            
            rows[index].className="red";
        } 
        if(index!=i ){
            rows[index].className="null";
        }
    }
}

$('#btn').click(function(){
    setInterval(func(), 2000); 
});

3 个答案:

答案 0 :(得分:1)

重置所有其他行,但“sec”函数中的最后一行除外。

if(index!=i ){
    rows[index].className="null";
}

删除该部分,它应该像你想要的那样工作

...很难我没有得到你想做的事,因为你所做的只是设置所有行背景......如果你想重置红色的那些,不要使用你的sec()函数...试试这个:

function func(){
    for (var i = 0; i < rows.length; i++) {
        var index=0;
        var c = rows[i].className;
        if(c=="red") {
            rows[i].className="";
        } else {
            rows[i].className="red";
        }
    } 
}

[编辑] ......清除了OP想要做的事情之后: http://jsfiddle.net/bzWV2/1/

[EDIT2] ......更简单的方法: http://jsfiddle.net/bzWV2/2/

答案 1 :(得分:0)

function highlight(element)
{
    $('tr').removeClass('red');

    el = (!element)? $('tr:first') : element;
    el.addClass('red');
    next_el = el.next('tr');
    var el = (next_el.length == 0)? $('tr:first'): next_el;
    setTimeout(function(){ highlight(el) }, 1000);
}

setTimeout(function(){ highlight() }, 1000);

http://fiddle.jshell.net/TFcUS/2/

答案 2 :(得分:0)

你可以这样做:

var $table = $("#table");
var $rows = $table.find("tr");    
var func = function(){
        var curIndex = $rows.filter('.red').index(),
            nextIndex = curIndex === $rows.length - 1?0:++curIndex;
        $rows.eq(nextIndex).addClass('red').siblings().removeClass('red');
    }


    $('#btn').click(function(){
        $rows.eq(0).addClass('red');
        setInterval(func, 2000); 
    });

DEMO