jQuery中的dom加载

jQuery中的加载:

$(function(){
    alert(1);
});
调用的是rootjQuery.ready( selector );其中rootjQuery = jQuery(document);所以上述代码可以写成:

$(document).ready(function(){
	alert(1);
});
$().ready()中的ready()是实例方法:

ready: function( fn ) {
		// Add the callback
		jQuery.ready.promise().done( fn );

		return this;
	},
fn就是function(){alert(1)},被添加到延迟对象中,等待被触发。
jQuery.ready.promise = function( obj ) {
	if ( !readyList ) {

		readyList = jQuery.Deferred();

		// Catch cases where $(document).ready() is called after the browser event has already occurred.
		// we once tried to use readyState "interactive" here, but it caused issues like the one
		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
		if ( document.readyState === "complete" ) {//DOM加载已经完成,直接调用
			// Handle it asynchronously to allow scripts the opportunity to delay ready
			setTimeout( jQuery.ready );//加延迟是针对IE

		} else {//dom加载未完成,进行监听

			// Use the handy event callback
			document.addEventListener( "DOMContentLoaded", completed, false );

			//有缓存时,先出发load,在触发DOMContentloaded
			window.addEventListener( "load", completed, false );
		}
	}
	return readyList.promise( obj );
};
等DOM加载完成后,会调用computed函数:最后直线工具方法 jQuery.ready()

completed = function() {//保证jQuery.ready()只触发一次
		document.removeEventListener( "DOMContentLoaded", completed, false );
		window.removeEventListener( "load", completed, false );
		jQuery.ready();
	};
工具方法jQuery.ready():

ready: function( wait ) {

		// Abort if there are pending holds or we're already ready
		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
			return;
		}

		// Remember that the DOM is ready
		jQuery.isReady = true;

		// If a normal DOM Ready event fired, decrement, and wait if need be
		if ( wait !== true && --jQuery.readyWait > 0 ) {
			return;
		}

		// If there are functions bound, to execute
		readyList.resolveWith( document, [ jQuery ] );

		// Trigger any bound ready events
		if ( jQuery.fn.trigger ) {
			jQuery( document ).trigger("ready").off("ready");
		}
	}
其中readyList.resolveWith( document, [ jQuery ] );会执行前面的fn函数,function(){alert(1)}
$(function(arg){
	console.log(this);//document对象
	console.log(arg);//jQuery函数
});


工具方法holdReady()
$.holdReady(true);
$(function(){
	alert(1);
});
上述代码不会弹出 1。
这个工具方法的用途:等a.js加载执行完后,在执行$(function(){alert(1);});

$.holdReady(true);
$.getScript("a.js",function(){
	$.holdReady(false)
})
$(function(){
   alert(1);
});
holdReady: function( hold ) {
		if ( hold ) {
			jQuery.readyWait++;
		} else {
			jQuery.ready( true );
		}
	}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值