getelementsbytagname上的Javascript错误

问题描述:

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。getelementsbytagname上的Javascript错误

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

+3

使用x.getElementsByTagName( 'TD')代替TR [X] .getElementsByTagName( 'TD') – Dasarp

当你得到这样的错误时,使用Web Inspector(Chrome/Safari)或Firebug(Firefox)查看你的变量是有用的。在var td =行上放置一个调试断点,然后查看变量的值。不过,这可能与在数组上使用for in循环有关。外环更改为这个,看看它的工作原理:

for (var x = 0, l = tr.length; x < l; ++x) { 
    var td = tr[x].... 

我的猜测是,你是没有查收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。

如果tr不是Object,那么它有可能在for...in循环中获取其他属性。如果是这种情况,.getElementsByTagName将不存在,并会引发异常。

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

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

对不起,我发现在一些行TR的一些隐藏的列TD。如果display = none,检查你的tr和td。

简单地改变你的代码,因为Dasarp说。

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