- ベストアンサー
再帰で関数を呼び出すとforループがうまくいかなくなる
プログラミング初心者です。 かなり初歩的な理解の間違いをしているかもですが、その都度指摘していただけたら幸いです。 ふとHTMLのdocumentを構成している全ノードの情報(具体的にはinnerHTMLとノード名について)を表示させようと思い、次のようなコードを書きました。 function getElementsinfo(anode){ if ((anode.childNodes.length) == 0){ alert(anode.innerHTML); alert(anode.nodeName); alert("最下層ノードです"); }else{ nagasa = anode.childNodes.length; for(j=0;j<nagasa;j++){ alert(anode.childNodes[j].innerHTML); alert(anode.childNodes[j].nodeName); getElementsinfo(anode.childNodes[j]); } } return 0; } getElementsByinfo(document.body); 私の意図するところとしては、最下位のノード(子ノードが存在しないノード)までたどり着いた場合に、forループを利用してnextSiblingにあたるノードの情報を表示できるようにしたかったのですが、 どうも最下位のノードまでたどり着いたところで関数の実行が終了してしまうようなのです。 つまり、ノードが 1 |_____ | | | 11 12 13 |_______ | | | 111 112 113 のような構造をしている場合 1→11→111→112→113→12→121→122…のようにノードの情報を表示させたかったのですが 1→11→111まで表示してプログラムの実行が止まってしまっています。 この問題に対し貴重なご意見をいただきたく存じます。 現状の私の理解では解決策を思いつかず、投稿させていただきました。 質問のわかりにくい点については随時補足させていただきます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- babu_baboo
- ベストアンサー率51% (268/525)
- himajin100000
- ベストアンサー率54% (1660/3060)
お礼
非常にわかりやすい解説に感謝致します。 グローバル変数と局所変数ですか…。完全に失念しておりました。 初め一通り学んだときに知識として入れていても、 いざコードを書くときにちゃんと思い出せなければいけませんね。 innerHTMLは正式な仕様ではないのですか。 これからはちゃんとW3Cの文書を読む癖もつけていきたいです。 本当に回答ありがとうございました。