ページが読み込まれるまで html 要素は存在しませんが<body>
、ブラウザーがタグを読み取る前に js が実行されます。スクリプト タグはタグの前にある<body>
ため、ブラウザーは最初に js コードを実行します。ページが読み込まれるまで js コードの実行を遅らせる必要がある場合 (ほとんどの js コードの場合と同様)、jquery を使用したくない場合は、次のようにします。
<script type="text/javascript">
window.onload = function() {
//js code here
}
</script>
その関数は、ページが読み込まれた後、onload イベントが発生するまで実行されません。onload イベントの問題は、イベントが発生する前にすべての画像を完全にロードする必要があることです。これには時間がかかり、js によって設定されたスタイルのレンダリングが遅れたり、js によって設定された onclick ハンドラをボタンが起動できるようになったりします。
別の方法として、body タグの直前に script タグを置くこともできます: ...
<script type="text/javascript">
//js code here
</script>
</body>
その場合、ページ上のすべての html は、javascript タグが検出されたときにブラウザーによって解析され、その結果、すべての html 要素が存在します。<img>
解析されるタグは存在しますが、ブラウザはタグが読み込まれるのを待ちません。ブラウザは続行し、画像の読み込み中に残りの html を解析します。終了タグがまだ表示されていなくても、 body 要素も存在します。
js コードが html を乱雑にしないように、js ファイルにリンクすることをお勧めします。
<script type="text/javascript" src="myjs.js"></script>
</body>
また、これがある場合:
<body class="bgcolor">
...そしてあなたのjsコードはこれを行います:
document.getElementsByTagName('body')[0].className += 'mac-os';
...それからあなたは彼を得るでしょう:
<body class="bgcolormac-os">
...これはあなたが望むものではありません。そこにスペースを追加する必要があります:
.... += ' mac-os';
...次のようになります。
<body class="bgcolor mac-os">
コード スタイルに関するコメント: 次のように、さらにスペースを追加する必要があります。
if (1 == mac) {
document.getElementsByTagName('body')[0].className += 'mac-os';
}
else {
document.getElementsByTagName('body')[0].className += 'win-os';
}
また、「寄り添う」else 句を使用しないでください。これらは本当に醜いものです。else が新しい行で始まる例のスタイルを使用することを検討してください。コードの明快さはあなたが目指しているものです - 最小バイト数ではありません。また、スペースを 2 つだけインデントすることも検討してください。js ステートメントはかなり長くなる可能性があるため、スペースを節約すると便利です。
そして、これらの長いステートメントを再入力するdocument.get....
必要がなくなり、コードを読みやすくするために、次のようなことができます。
var mybody = document.getElementsByTagName('body')[0];
if (1 == mac) {
mybody.className += ' mac-os';
}
else {
mybody.className += ' win-os';
}