スポンサーリンク

JavaScriptの動かないコード (初級編) DOMアクセスできない


クイズ…下記のコードが意図した動作をしないのは,どうしてですか。(制限時間1分)

<body>

<script language="JavaScript">
	// "test"と表示
	alert( my_p.innerHTML );
</script>

<p id="my_p">
test
</p>

</body>






発生する不具合と原因

script要素中のコードが実行されるタイミングは,ブラウザがDOMツリーを構築する作業の真っ最中。

従って,scriptタグの中に地で書いたコードが実行される際には,それより後ろの p 要素がまだ存在しないので,DOMアクセスすることはできない。

試しに,上記のコード中で

alert( document.body.innerHTML );

を実行してみれば,直後からまでしか表示されない事を確認できる。


参照:

[JavaScript] とてもシンプルに自分自身が属する script 要素を取得
http://d.hatena.ne.jp/amachang/200612...

修正案

動作を改善するには

window.onload = f1; // 読み込み終了を待つ

function f1()
{	
	alert( my_p.innerHTML );
}

とすればよい。