![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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要素にアクセスしていることだと思うのですが、どうも原因がわかりません。
もちろん元のコードでもエラーは出ていません。
詳しい方、どうぞお力添えいただけないでしょうか。
No.2ベストアンサー
- 回答日時:
# 多分 No.1 さんと同じ事でしょうが...
childNodes で得られる要素には、ゴミかと疑いたくなる様なものが混ざります。 例えば表示文字を格納する為の「タグでは無い要素」とか。 これに対処できるコードに変えませんか?
# それだけが原因では無いかも知れませんが、そういうコーディングの習慣を付ける方が良いですよ。
具体的には、以下を直してみてください。
1 配列要素数には 5 とか の定数で無く kami.length を使う。
2 kami[x] のうち、 kami[x].tagName が偽の要素は読み飛ばす。
他の言語等でポインタの扱いに慣れてる人は、添字を使わずに firstChild と nextSibling でループを制御する方が良いかも知れません。 読み飛しは必要ですが。
No.3
- 回答日時:
var kami = document.getElementById(mzu).childNodes;
を、
var cnt = 0, kami = [], ns = document.getElementById(mzu).childNodes, n;
while (n = ns[cnt++]) if (1 === n.nodeType) kami.push(n);
とかなら?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSCの終了の仕方
-
VBAでの一時停止と再開の方法
-
画面を強制的に再描画させる方法
-
【VBA】全て空白のセルの列の非...
-
DoEventsが必要な理由について
-
範囲指定したセルを1つずつ飛...
-
フラグについて
-
For文を使った九九表の作成
-
素数の個数を求めるプログラミング
-
C#で別のフォームのprogress ba...
-
while(*s++=*t++)の判定は?
-
プログラミングについて。 1つ...
-
vbscriptでIE自動入力(途中で...
-
EXCEL VBA If~Else~構文の内容...
-
エディットボックスのテキスト...
-
pythonでリストの要素を小さい...
-
アクティブセルから、A列最終行...
-
StatementとResultSetのclose()...
-
アップルループについて
-
乱数の桁数指定、または範囲指定。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
どなたかこのプログラミングを...
-
VBAでの一時停止と再開の方法
-
VBA for i=1 to lastrow
-
UWSCの終了の仕方
-
DoEventsが必要な理由について
-
エクセルの当番表を作っていま...
-
VBAで3秒だけ時間を止めたい
-
GIFアニメをループさせたくない
-
Escキーを押すと、中断する時と...
-
DOSコマンドのループ内のTIMEコ...
-
CSVファイルの特定の行だけを読...
-
アクティブセルから、A列最終行...
-
vb.netからエクセル関数書き込み
-
範囲指定したセルを1つずつ飛...
-
テキストボックスの名前に変数...
-
乱数の桁数指定、または範囲指定。
-
「偶数・奇数の和」のフローチ...
-
vbscriptでIE自動入力(途中で...
おすすめ情報