在jQuery
里面,咱们能够看到两种写法:
$(function(){})
和$(document).ready(function(){})
,
这两个方法的效果都是同样的,都是在dom文档树加载完以后执行一个函数,
(注意,这里面的ready
是DOM
树加载完成,不是onload
的页面资源加载完成的)。
document.ready
方法document.ready
方法//document是一个DOM对象,这个对象自己没有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(); } } //还有一种方法是: (function () { var ie = !!(window.attachEvent && !window.opera); var wk = /webkit\/(\d+)/i.test(navigator.userAgent) && (RegExp.$1 < 525); var fn = []; var run = function () { for (var i = 0; i < fn.length; i++) fn[i](); }; var d = document; d.ready = function (f) { if (!ie && !wk && d.addEventListener) return d.addEventListener('DOMContentLoaded', f, false); if (fn.push(f) > 1) return; if (ie) (function () { try { d.documentElement.doScroll('left'); run(); } catch (err) { setTimeout(arguments.callee, 0); } })(); else if (wk) var t = setInterval(function () { if (/^(loaded|complete)$/.test(d.readyState)) clearInterval(t), run(); }, 0); }; })(); //实际使用的时候,上面两种方法选一个便可使用 document.ready( function(){} ); //结论是原生js自己并无提供 document.ready方法
//控制台打印一下window,看看onload是什么东东 window //other... onlanguagechange:null onload:null onloadeddata:null //other... //能够看到window的onload属性的值是null //window.onload = function() {//code...} //在使用的时候:先使用函数表达式的方式给它定义函数,很容易犯错的是 将它看成函数直接使用。
document.ready
和 window.onload
的区别是:上面定义的document.ready
方法在DOM
树加载完成后就会执行,而window.onload
是在页面资源(好比图片和媒体资源,它们的加载速度远慢于DOM的加载速度)加载完成以后才执行。也就是说$(document).ready
要比window.onload
先执行。web
ready
要比 onload
先执行:window.onload = function () { alert('onload'); }; document.ready(function () { alert('ready'); });
执行这段代码以后,你会看到浏览器里面会先弹出ready
,在弹出onload
。