2012-11-01 29 views
2

jQuery有一個ready方法:如果我把所有腳本放在`</body>`之後,我是否需要等待`domReady`?

$(document).ready(function(){ 
    // my code 
}) 

當DOM就緒它將執行我的代碼。

我有一個問題,如果我把我所有的腳本</body>後,如

<html> 
    <body> 
     // all kinds of html tags 
    </body> 
    <script src="/path/to/jquery.js"></script> 
    <script src="/path/to/all-javascript-compressed-in-one-file.js"></script> 
</html> 

我還需要寫$(document).ready()嗎? </body>之後已經是ready了嗎?

+0

如果它不是'',它在所有類型的瀏覽器上都沒有? – Freewind

+0

事情是,你希望你的腳本無論如何都是函數代碼,所以你需要一個函數包裝器,'jQuery(function($){...});'是實現這一點的一種便捷方式。 –

回答

4

通常情況下,這些腳本只是</body>前加入,不是–後的HTML,否則不會確認;正如imeime Vidas在他的評論中指出的那樣,<head><body>之外不會出現任何內容。

這就是說,從技術上說DOM在這一點上還沒有被認爲是準備好的(因爲瀏覽器仍在解析<body>),但已經包含了正文中的所有元素。因此,跳過$(document).ready()是安全的。

否則,將較早執行你的初始化腳本,因爲有一些延遲觸發實際DOMContentLoaded事件之前。這意味着更快的頁面加載和更好的用戶體驗。

你可能有興趣在這個related discussion有關強制jQuery的ready事件。

+0

我讀了一些建議把腳本放在最後(爲了加快頁面加載的可能性) – alfred

+0

@alfred - 是的,把它們放在最後,但通常,正如指出的那樣,它們緊挨着放在正文標記之前,而不是放在它之後。 – Adam

+0

這就是HTML定義的方式。沒有內容可以出現在「」或「」之外。 –

3

總之,沒有。當dom樹可用時,dom被認爲是「準備好」的,如果你的javascript是頁面上的最後一個東西,那麼它之前的所有東西都是「準備就緒」的,因爲網頁從上到下被「加載」。

相關問題