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错误
我试了很多,但很混乱。它不应该是一个错误。
答
当你得到这样的错误时,使用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
将不存在,并会引发异常。
如果tr
是Array
,则应该使用常规for
循环代替。
答
对不起,我发现在一些行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;
}
使用x.getElementsByTagName( 'TD')代替TR [X] .getElementsByTagName( 'TD') – Dasarp