在Jquery里面,我們可以看到兩種寫法:$(function(){}) 和$(document).ready(function(){})
這兩個方法的效果都是一樣的椭住,都是在dom文檔樹加載完之后執(zhí)行一個函數(shù)(注意趁窃,這里面的文檔樹加載完不代表全部文件加載完)牧挣。
而window.onload是在dom文檔樹加載完和所有文件加載完之后執(zhí)行一個函數(shù)。也就是說$(document).ready要比window.onload先執(zhí)行醒陆。
那么Jquery里面$(document).ready函數(shù)的內部是怎么實現(xiàn)的呢瀑构?下面我們就來看看:
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這個函數(shù)是實現(xiàn)了怀樟。我們再來驗證一下最上面所說的“ready要比onload先執(zhí)行”:
window.onload = function () {
alert('onload');
};
document.ready(function () {
alert('ready');
});
執(zhí)行這段代碼之后汞窗,你會看到瀏覽器里面會先彈出“ready”,在彈出onload厕宗。