[英]Is placing script tag before </body> tag equivalent to jQuery's document.ready method
如果我們在關閉body之前的腳本標記中調用javascript方法myMethod()
,它是否相當於在jQuery的document.ready函數中調用myMethod()
? 如果沒有,為什么?
從這里 :
引擎蓋下:$(document).ready()正如您對John Resig所期望的那樣,jQuery確定DOM何時就緒的方法使用了各種各樣的優化。 例如,如果瀏覽器支持DOMContentLoaded事件(就像許多非IE瀏覽器那樣),那么它將觸發該事件。 但是,在文檔的readyState達到“完成”之前,IE無法安全地觸發,這通常是后來的。 如果這些優化都不可用,window.onload將觸發該事件。
這些事件獨立於HTML標記內的位置,因為即使在呈現</body>
時其他事件仍在進行中。
不,它不一樣,你將<script>
標簽放在結束</body>
<script>
標簽之前,以避免阻止在舊版瀏覽器AFAIK上呈現html,但你不能保證DOM已經“准備好”
不完全是。 $(document).ready();
對所謂的DOMContentLoaded
事件做出反應,該事件在加載DOM之后立即觸發,並且瀏覽器知道頁面上的所有元素(而不是內容本身)。
代碼通常放在這些塊中的主要原因與防止並行加載的阻塞並沒有多大關系,而是確保在頁面加載期間要操作的元素實際加載並存在於DOM樹中。 操縱瀏覽器不知道的元素沒什么意義嗎?
將JavaScript內容(或任何其他內容)放在頁面底部實際上與頁面加載完成后觸發的onload
事件(包括內容本身)更密切相關。 無論哪種方式,幾乎可以確定$(document).ready()
塊內的內容將在頁面底部的內容之前執行,但是如果你加載了ready()
塊中的代碼所依賴的外部庫你就不能把它們放在頁面底部。
通常,如果您的代碼不依賴於外部庫並且成功加載DOM,則可以安全地將其放在頁面底部。 如果你有東西需要在加載DOM后立即執行,你絕對想要$(document).ready()
塊中的代碼,但是請記住你可以把那個塊放在任何你想要的地方,甚至在頁面的中間(有時可能是一個很好的技巧)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.