2012-04-16 12 views
6

にタグ同等の前にスクリプトタグを配置しており、それはjQueryのdocument.ready関数内myMethod()を呼び出すのと同じですか?そうでない場合、なぜですか?jQueryのdocument.ready方法

答えて

6

からという保証はありませんhere

ボンネットの下に:$(ドキュメント).ready()あなたはジョン・ から予想されるようにResig氏、DOMの準備ができると判断するためのjQueryの方法は、最適化の 品揃えを使用しています。たとえば、ブラウザが DOMContentLoadedイベントをサポートしている場合(非IEブラウザの多くの場合)、そのイベントで が発生します。しかし、文書の readyStateが「完了」に達するまで、IEは安全に起動できません。 のいずれも使用できない場合、window.onloadは イベントをトリガーします。

これらのイベントは、HTMLタグ内の場所に依存しません。他のイベントは、レンダリング時にもまだ行われているため、</body>です。

3

はありません、それはあなたが私の知る限り、古いブラウザ上でHTMLのレンダリングを阻止避けるために終了</body>タグの前<script>タグを配置、同じではないのですが、あなたはDOMが「準備完了」である

0

正確ではありません。 $(document).ready();は、DOMがロードされブラウザがコンテンツ(コンテンツ自体ではなく)のすべての要素を認識した直後に起動される、いわゆるDOMContentLoadedイベントで反応します。

通常、コードがこれらのブロックの中に置かれる主な理由は、並列ロードのブロックを防ぐことではなく、ページロード時に操作される要素が実際にロードされてDOMツリーに存在することです。ブラウザが正しく認識していない要素を操作するにはあまり意味がありませんか?

ページの下部にJavaScriptコンテンツ(またはその他のコンテンツ)を配置すると、実際にはコンテンツの内容を含めてページの読み込みが完了した後に発生するonloadイベントに、より密接に関連します。どちらの場合でも、$(document).ready()ブロック内のコンテンツは、ページ下部の1つ前に実行されますが、ready()ブロック内のコードが依存する外部ライブラリをロードすると、ページの最下部に配置できません。

一般に、外部ライブラリに依存しないコードがあり、DOMのロードが成功した場合は、安全にページの下部に配置できます。しかし、DOMがロードされた直後に実行する必要のあるものがある場合は、ブロックを$(document).ready()ブロックに入れたいと思っていますが、ページの真ん中にでもそのブロックを置くことができます(時にはすてきなトリックかもしれません)。