談談document.ready和window.onload的區別
阿新 • • 發佈:2019-01-01
在Jquery裡面,我們可以看到兩種寫法:$(function(){}) 和$(document).ready(function(){})
這兩個方法的效果都是一樣的,都是在dom文件樹載入完之後執行一個函式(注意,這裡面的文件樹載入完不代表全部檔案載入完)。
而window.onload是在dom文件樹載入完和所有檔案載入完之後執行一個函式。也就是說$(document).ready要比window.onload先執行。
那麼Jquery裡面$(document).ready函式的內部是怎麼實現的呢?下面我們就來看看:
我們來為document新增一個ready函式:
document.ready = function(callback) { ///相容FF,Google if (document.addEventListener) { document.addEventListener('DOMContentLoaded', function () { document.removeEventListener('DOMContentLoaded', arguments.callee, false); callback(); },false) } //相容IE else if (document.attachEvent) { document.attachEvent('onreadystatechange', function () { if (document.readyState == "complete") {
document.detachEvent("onreadystatechange", arguments.callee);
callback();
} }) }else if (document.lastChild == document.body) { callback(); } }
document.ready這個函式是實現了。我們再來驗證一下最上面所說的“ready要比onload先執行”:
window.onload = function () { alert('onload'); }; document.ready(function () { alert('ready'); });
執行這段程式碼之後,你會看到瀏覽器裡面會先彈出“ready”,在彈出onload。