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。
我尝试了很多,但很混乱。这不应该是一个错误。
答案 0 :(得分:1)
如果tr
不是Object
,则有可能在for...in
循环中拾取其他属性。如果是这种情况,.getElementsByTagName
将不存在并且会抛出异常。
如果tr
是Array
,则应该使用常规for
循环。
答案 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;
}