在jQuery裏面,咱們能夠看到兩種寫法:dom
$(function(){ //todo }) $(document).ready(function(){ //todo })
這兩個方法的效果都是同樣的,都是在dom文檔樹加載完以後執行一個函數(注意,這裏面的文檔樹加載完不表明所有文件加載完)。函數
window.onload是在dom文檔樹加載完和全部文件加載完以後執行一個函數。也就是說$(document).ready要比window.onload先執行。spa
模擬document添加一個ready函數: code
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('onreadytstatechange', function () { if (document.readyState == "complete") { document.detachEvent("onreadystatechange", arguments.callee); callback(); } }) } else if (document.lastChild == document.body) { callback(); } }
document.ready這個函數是實現了。再來驗證一下最上面所說的「ready要比onload先執行」xml
window.onload = function () { alert('onload'); }; document.ready(function () { alert('ready'); });