2012-03-30 14 views
1

私はdocument.body.onload=function(){...}のページを持っていますが、ドキュメントには外部<img>タグなども含まれているため、これは遅れています。 onloadは、これらの外部サイトが何らかの応答を出した後にのみ解雇されるようです。Javascript:document.onloadの前にDOMにアクセスする

DOMツリーが完全に利用可能でないと思ったため(例:document.getElementById(x)があまりにも早く呼び出された場合はnullを返すなど)、コードをonloadに入れました。

DOM内のすべてにアクセスできてから、すべてがロードされる前にトリガーされるイベントはありますか?

+1

外部画像を読み込むこともできます。 – mplungjan

+0

'document.body.onload'は存在しません。あなたはおそらく ''を考えているでしょう。 –

答えて

5

HTMLが順番に解析されるので、あなただけの体の終わりにあなたの<script>タグを配置することができます。

さらに、jqueryのdocument.readyを見ることができます。 jqueryを使用したくない場合でも、jqueryの処理方法を確認できます。 readyはあなたが求めているものとまったく同じです。

2

確かにあなたがすることができます:jQueryの使用により

1) :

はたぶん、あなたは2つのオプションがあり$(document).ready()で を、あなたはあなたのイベントをロードしたり、火災や何があなたがそれらを前にやりたい得ることができますウィンドウがロードされます。

2) DOMContentLoaded 参考:https://developer.mozilla.org/en/DOM/DOM_event_reference/DOMContentLoaded

function checkDom(yourFunc) 
{ 
    window.addEventListener('DOMContentLoaded', yourFunc); 
} 
+0

これはjqueryですが、質問には言及されていません。さらに、これはまったく役に立たないでしょう。あなたは 'ready'を使う必要があります。 –

0

実際にドキュメント全体を読み込む必要があるかどうかを検討する必要があります。ライブラリが既にロードされていて、関心のあるDOMノードがページ上にある限り、すぐに行動することができます。コードのこの種のは、ページがロードされ、すべての最後のリソースを待って1よりもはるかに高速を「生き生き」を作る:

<form name="foo"> 
    <!-- ... --> 
</form> 
<script> 
    var form = new My.FormWidget(document.forms.foo); 
</script> 

これは(あなたがしたいはずですFormWidgetにロジックをカプセル化するためにあなたを強制する追加の利点を持っています可能な限り簡潔な「インライン」スクリプトを作成してください)。

関連する問題