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

ループは最初の反復でのみ機能しますが、2番目の反復でエラーtd [2]が未定義であるのに対し、各Row(tr)には8つの8列(td)が含まれています。50Tr以上。

私はたくさん試しましたが、とても混乱しています。エラーではないはずです。

4

5 に答える 5

1

trが でない場合、ループObjectで他のプロパティを取得している可能性があります。for...inこの場合、.getElementsByTagName存在せず、例外がスローされます。

trが の場合、代わりにArray通常のforループを使用する必要があります。

関連:配列反復で「for...in」を使用するのはなぜ悪い考えなのですか?

于 2012-05-18T17:33:44.350 に答える
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 インスペクター (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

私の推測では、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

申し訳ありませんが、一部の行 tr の下に非表示の列 td が見つかりました。display=none の場合は、tr と td を確認してください。

于 2012-05-18T17:35:21.703 に答える