0
for(x in tr)
{
    var td = tr[x].getElementsByTagName('td');
    if(isNaN((bids=parseInt(td[2].innerHTML))))bids=0;
}

循环仅适用于第一次迭代,但在第二次迭代中我收到错误 td[2] 未定义,而每行(tr)包含八个 8 列(td)。超过 50 Tr。

我已经尝试了很多,但很混乱。这不应该是一个错误。

4

5 回答 5

1

如果tr不是,则它有可能在循环Object中拾取其他属性。for...in如果是这种情况,.getElementsByTagName将不存在并且会抛出异常。

如果trArray,您应该改用常规for循环。

相关:为什么在数组迭代中使用“for...in”是个坏主意?

于 2012-05-18T17:33:44.350 回答
0

我的猜测是您通过不检查for in循环来访问 tr 的无意属性。

尝试:

for(x in tr)
{
    if(tr.hasOwnProperty(x)){
        var td = tr[x].getElementsByTagName('td');
        if(isNaN((bids=parseInt(td[2].innerHTML))))bids=0;
    }
}

要快速解释原因,请考虑以下内容:"toString" in tr将返回 true。

于 2012-05-18T17:33:17.623 回答
0

正如 Dasarp 所说,简单地更改您的代码。

for(x in tr)
{
    var td = x.getElementsByTagName('td');
    if(isNaN((bids=parseInt(td[2].innerHTML))))bids=0;
}
于 2012-05-18T17:45:33.740 回答
0

当您遇到此类错误时,使用 Web Inspector (Chrome/Safari) 或 Firebug (Firefox) 查看您的变量会很有用。在行上放一个调试断点var td =,然后查看变量的值。

不过,这可能与for in在数组上使用循环有关。将外部循环更改为此,看看它是否有效:

for (var x = 0, l = tr.length; x < l; ++x) {
  var td = tr[x].... 
于 2012-05-18T17:29:51.663 回答
0

抱歉,我在某些行 tr 下发现了一些隐藏列 td。如果显示=无,请检查您的 tr 和 td。

于 2012-05-18T17:35:21.703 回答