- ベストアンサー
getElementByIdを使うとforループが機能不全になる。
Javascript初心者です。至らないところも多々あるかと存じますがよろしくお願いします。ブラウザはIE7を使用しています。 当初以下のようなコードを動作させようとしたところ、 for(h = 1;h < 3;h++){ ※1 var mzu= "menu" + h; var kami = document.getElementById(mzu).childNodes; for(var x =0;x<5;x++){ var jiu = "suichi" + h; var sai = document.getElementById(jiu).offsetHeight; ※2 ☆kami[x].style.top = (sai*(x+1));☆ } } ※☆は後の説明用に付加しているだけで実際のコードにはありません IDが"menu1"の要素については期待したような結果が得られたのですが、IDが"menu2"の要素について期待したような結果が得られなかったため、alert()を用いて原因を探ることにしました。具体的には※1の部分にalert(h);を、※2の部分にalert(kami[x].style.position);を入れてみて、動作確認をしてみました。 私が期待しているようなメッセージの出る順番というのは 「1」が表示される→4回"kami[x].style.position"の中身が表示される(ちなみにabsolute)(★)→「2」が表示される→再び4回"kami[x].style.position"の中身が表示される というものですが、実際には★の部分までしか期待されたメッセージが表示されなかったため、forループ(一つ目の)が一回のみで終了してしまったのだと判断しました。 そこでひとつひとつの行を削除したり再び加えたりしながらforループ を一回目で止めてしまっている原因を探ってみたところ、 ※2(kami[x].style.position);の行と☆~☆の行を削除した場合は メッセージが1→2と表示される、すなわちひとつめのforループがしっかりと機能していることから、おそらく原因は※2の行や☆~☆の行で DOM要素にアクセスしていることだと思うのですが、どうも原因がわかりません。 もちろん元のコードでもエラーは出ていません。 詳しい方、どうぞお力添えいただけないでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- babu_baboo
- ベストアンサー率51% (268/525)
- babu_baboo
- ベストアンサー率51% (268/525)
お礼
どうも回答ありがとうございます。 自己解決いたしました。