0

私の知る限り、html / javascriptの実行順序は(すべてのプログラミング言語と同様に)シリアルです。つまり、ブラウザーはhtml / javascriptコードを1行ずつ読み取り、それを解釈します。

そのため、一部のJavaScriptプログラマーは、本文の最後にタグを配置します。これにより、DOM全体が読み込まれ、必要な要素にアクセスできるようになります。これが彼らのやり方です-

<html>
...
<body>
...
<script> //whatever code you want to put
</script>
</body>

これをテストしたかったので、次のコードを書きました

<html>
<head>
</head>
<body>
<script>
var elm=document.getElementById("myp");
alert(elm.innerHTML);
</script>
<p id="myp"> well this is darned interesting </p>
</body>
</html>

ご覧のとおり、p要素が定義され、スクリプトがそれにアクセスしようとする前に、スクリプトを配置しました。pはまだ定義されていないのでエラーになると思いましたが、「これはとてつもなく面白い」(pの値)が得られました。スクリプトをhead要素に配置したときにも同じことが起こります。(クロムとFirefoxでテスト)。

誰かが何が起こっているのかを明らかにすることができますか?

4

1 に答える 1

2

この特定の例で起こっていることの詳細はさておき、私は一般的な原則を要約します。私の情報源はFlanagan、JavaScript:The Ultimate Guide、5/eです。

ブラウザをHTMLの行を読み取り、それに応じて何かをレンダリングするものと考えるのは単純すぎます。確かに、入力を順番にスキャンしますが、DOMオブジェクト構築のシーケンスは、スキャンされた入力と1行ずつではありません。ブラックボックスとして扱う方がよいでしょう。

onloadDOM要素を操作するスクリプトを実行する場合、安全で確実な方法は、イベントのハンドラーとしてスクリプトを実行することです。インラインスクリプトを記述してそれを実行できる場合もありますが、これは灰色の領域です。フラナガンはこう書いています:

<script>ほとんどのブラウザでは、スクリプトでタグの前に表示されるドキュメント要素を操作できるようです。一部のJavaScriptプログラマーはこれを日常的に行っています。ただし、標準では機能する必要はなく、経験豊富なJavaScriptコーダーの間では、ドキュメント操作コードをタグ内に配置すると問題が発生する可能性があるという信念<script>があります。(p.256)

ただし、すべてのHTMLが解析された後、すべての画像が読み込まれる前に、DOMを操作する必要がある場合があります。それが必要な場合は、jQueryやそのreadyイベントなどのツールが最適です。

于 2012-06-14T15:57:07.697 に答える