jQuery1.0源代码分析之ready函数(四)
上几篇文章已经说明白了,jQuery的基本框架设计。这一篇我们来细说一下,jQuery的ready函数。
jQuery的ready函数,就相当于c语言里的main函数。代表的意义是当Dom文档加载成功,就开始执行ready函数。
Dom文档加载成功绑定的是document的DOMContentLoaded事件,而网页加载完成绑定的是window的load事件,前者要比后者早很多。
有一个很好的在线例子,是微软提供的。地址如下
http://ie.microsoft.com/testdrive/HTML5/DOMContentLoaded/Default.html,你访问的时候最好用IE 9或者其他支持标准的浏览器。
jQuery的ready函数使用起来也很简单,有两种方法,代码如下:
$(document).ready(function() {
// start here
});
$(function() {
// start here
});
这两种方法区别不大,用那个都可以。
我们来看一下jQuery的代码是如何处理的
function jQuery(a,c) {
// Shortcut for document ready (because $(document).each() is silly)
if ( a && a.constructor == Function && jQuery.fn.ready )
return jQuery(document).ready(a);
}
很明显,当我们使用第二种方法的时候,jQuery也是走的第一种方法。也就是说第二种方法是第一种的快捷方式。都是调用jQuery的原型方法ready函数。
我们来看一下jQuery原型方法的ready函数。参数f就是我们传进来的匿名函数,当isReady标志变量是true的时候,直接执行f函数,否则,把f函数放到readyList数组中去。
jQuery.fn.extend({
ready: function(f) {
// If the DOM is already ready
if ( jQuery.isReady )
// Execute the function immediately
f.apply( document );
// Otherwise, remember the function for later
else {
// Add the function to the wait list
jQuery.readyList.push( f );
}
return this;
}
});
很好理解isReady就是标志变量,当Dom文档加载好了,就设置为true,readyList就是存放我们传进来的匿名函数的数组。
所以jQuery的静态方法ready就是当isReady为true的时候,把readyList中的函数统统执行一遍。
jQuery.extend({
/*
* All the code that makes DOM Ready work nicely.
*/
isReady: false,
readyList: [],
// Handle when the DOM is ready
ready: function() {
// Make sure that the DOM is not already loaded
if ( !jQuery.isReady ) {
// Remember that the DOM is ready
jQuer
- 发表评论
-
- 最新评论 更多>>