getelementsbytagname上的Javascript错误

时间:2012-05-18 17:25:33

标签: javascript arrays undefined getelementsbytagname

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

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

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

5 个答案:

答案 0 :(得分:1)

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

如果trArray,则应该使用常规for循环。

相关:Why is using "for...in" with array iteration a bad idea?

答案 1 :(得分: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].... 

答案 2 :(得分: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。

答案 3 :(得分:0)

抱歉,我在某些行tr下发现了一些隐藏的列td。如果display = none,请检查你的tr和td。

答案 4 :(得分:0)

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

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