画面上有一个table,我想用js去遍历每个td的内容和颜色,但是一旦遍历到第7行,IE就会报错,说这个执行非常慢,要求中断。
哪位可以帮我修改一下这个js,让它快一点。谢谢。function onToroku() {
    var d = document;
    var tr = d.getElementById("gvSyukin").getElementsByTagName("tr");
    var rowObj;
    var stItem;
    var sValue = "";
    var i, j;
    var sHeader;
    var iRowCT = 1;     for (i = 2; i <= tr.length-1; i++) {
        if (iRowCT <= 3) {
            rowObj = tr[i];
            stItem = rowObj.getElementsByTagName("td")[2];
            if (sValue != "") {
                sValue = sValue + "/";
            }
            sValue = sValue + stItem.firstChild.data             j = 3;
            do {
                stItem = rowObj.getElementsByTagName("td")[j];
                if (stItem.firstChild.data == " " || stItem.firstChild.data == "休") {
                    if (stItem.firstChild.data == " ") {
                        sValue = sValue + "," + "1";
                    }
                    else {
                        sValue = sValue + "," + "0";
                    }                     if (stItem.bgColor == "#808080" || stItem.bgColor == "#ffffff" || stItem.bgColor == "#ff8080") {
                        sValue = sValue + "," + "0";
                    }
                    if (stItem.bgColor == "#a0a0ff" || stItem.bgColor == "#7f40c0") {
                        sValue = sValue + "," + "1";
                    }
                    if (stItem.bgColor == "#0000ff" || stItem.bgColor == "#cf90bf") {
                        sValue = sValue + "," + "2";
                    }                     j++;
                }
                else {
                    break;
                }             } while (true)
            iRowCT = iRowCT + 1;
        }
        else {
            i = iRowCT + 2
        }
        
    }
    
    form1.hSyukiData.value = sValue;
}

解决方案 »

  1.   

    将sValue改成数组function onToroku() {
            var d = document;
            var tr = d.getElementById("gvSyukin").getElementsByTagName("tr");
            var rowObj;
            var stItem;
            var sValue = [];
            var i, j;
            var sHeader;
            var iRowCT = 1;
            for (i = 2; i <= tr.length-1; i++) {
                if (iRowCT <= 3) {
                    rowObj = tr[i];
                    stItem = rowObj.getElementsByTagName("td")[2];
                    if (sValue.length > 0) {
                        sValue.push("/");
                    }
                    sValue.push(stItem.firstChild.data);                j = 3;
                    do {
                        stItem = rowObj.getElementsByTagName("td")[j];
                        if (stItem.firstChild.data == " " || stItem.firstChild.data == "休") {
                            if (stItem.firstChild.data == " ") {
                                sValue.push("," + "1");
                            }
                            else {
                                sValue.push("," + "0");
                            }                        if (stItem.bgColor == "#808080" || stItem.bgColor == "#ffffff" || stItem.bgColor == "#ff8080") {
                                sValue.push("," + "0");
                            }
                            if (stItem.bgColor == "#a0a0ff" || stItem.bgColor == "#7f40c0") {
                                sValue.push("," + "1");
                            }
                            if (stItem.bgColor == "#0000ff" || stItem.bgColor == "#cf90bf") {
                                sValue.push("," + "2");
                            }                        j++;
                        }
                        else {
                            break;
                        }                } while (true)
                    iRowCT = iRowCT + 1;
                }
                else {
                    i = iRowCT + 2
                }
                
            }
            
            form1.hSyukiData.value = sValue.join("");
        }
      

  2.   

    感谢kongxh1218的修正 在你的基础上改了一下 稍微好了一点,但是还是报错。function onToroku() {
        var d = document;
        var tr = d.getElementById("gvSyukin").getElementsByTagName("tr");
        var rowObj;
        var stItem;
        var sValue = [];
        var i, j;
        var sHeader;
        var iRowCT = 1;
        var sTempValue,sTempColor;     for (i = 2; i <= tr.length - 1; i++) {
            if (iRowCT <= 3) {
                rowObj = tr[i];
                stItem = rowObj.getElementsByTagName("td")[2];
                if (sValue.length > 0) {
                    sValue.push("/");
                }
                sValue.push(stItem.firstChild.data);             j = 3;
                do {
                    stItem = rowObj.getElementsByTagName("td")[j];
                    sTempValue = stItem.firstChild.data;
                    sTempColor = stItem.bgColor;
                    if (sTempValue == " " || sTempValue == "莨・) {
                        if (sTempValue == " ") {
                            sValue.push("," + "1");
                        }
                        else {
                            sValue.push("," + "0");
                        }                     if (sTempColor == "#808080" || sTempColor == "#ffffff" || sTempColor == "#ff8080") {
                            sValue.push("," + "0");
                        }
                        else {
                            if (sTempColor == "#a0a0ff" || sTempColor == "#7f40c0") {
                                sValue.push("," + "1");
                            }
                            else {
                                if ((sTempColor == "#0000ff" || sTempColor == "#cf90bf")) {
                                    sValue.push("," + "2");
                                }  
                            } 
                        }                     j++;
                    }
                    else {
                        break;
                    }             } while (true)
                iRowCT = iRowCT + 1;
            }
            else {
                i = iRowCT + 2
            }     }     form1.hSyukiData.value = sValue.join("");
    }
      

  3.   

    你的问题是由于但线程占用造成的,我有个想法是你通过构造一个异步方法来实现,思路是创建一个XMLHttpReuest对象,然后向一个错误地址发起一次请求,然后将错误处理作为回调函数,在这个回调函数里面进行的你方法
      

  4.   

    建议楼猪用JQ来做 JQ提供了.each()方法 方便且效率不言而欲