献给和我合作的过得前端童靴们:jquery源码分析--核心函数(包装对象和holdReady方法)
2016-04-20 18:14
906 查看
包装对象
包装对象其实之前已经有提过了。这里就再仔细的说一下。
isArrayLike 判断是否是数组
是数组,使用 jQuery.merge 方法合并数组中的每一个元素
不是数组,使用的是 push 方法,之前在序中提到过 jQuery.fn 是一个数组, “push.call( ret, arr )” 相当于 jQuery.fn .push( arr )。
holdReady方法
1.之前分析过 “jQuery.ready”方法不再重复。该方法只控制控制“jQuery.ready”方法,而“jQuery.ready”方法会在“onload”事件的时候执行,所以 “jQuery.holdReady”方法只能用在“ $(function(){})”外,放在内部是无效果的。
2.具体控制 “jQuery.ready”执行是由 “jQuery.readyWait和jQuery.isReady”两个属性控制,“jQuery.readyWait”相对权重高一点。
到现在为止,创建jQuery对象已经分析完毕,接下来分析就是一个重头戏,jQuery选择器, 先容我吐槽一下 选择器。。。
包装对象其实之前已经有提过了。这里就再仔细的说一下。
init = jQuery.fn.init = function( selector, context, root ) { jQuery.makeArray( selector, this ); } makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { push.call( ret, arr ); } } return ret; }
isArrayLike 判断是否是数组
是数组,使用 jQuery.merge 方法合并数组中的每一个元素
不是数组,使用的是 push 方法,之前在序中提到过 jQuery.fn 是一个数组, “push.call( ret, arr )” 相当于 jQuery.fn .push( arr )。
holdReady方法
jQuery.extend({ readyWait: 1, isReady: false, holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, ready: function( wait ) { if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } jQuery.isReady = true; if ( wait !== true && --jQuery.readyWait > 0 ) { return; } readyList.resolveWith( document, [ jQuery ] ); if ( jQuery.fn.triggerHandler ) { jQuery( document ).triggerHandler( "ready" ); jQuery( document ).off( "ready" ); } } })
1.之前分析过 “jQuery.ready”方法不再重复。该方法只控制控制“jQuery.ready”方法,而“jQuery.ready”方法会在“onload”事件的时候执行,所以 “jQuery.holdReady”方法只能用在“ $(function(){})”外,放在内部是无效果的。
2.具体控制 “jQuery.ready”执行是由 “jQuery.readyWait和jQuery.isReady”两个属性控制,“jQuery.readyWait”相对权重高一点。
到现在为止,创建jQuery对象已经分析完毕,接下来分析就是一个重头戏,jQuery选择器, 先容我吐槽一下 选择器。。。
相关文章推荐
- 解读(function($){...})(jQuery)
- jQuery的正则表达式验证大写字母
- 关于jQuery学习
- Jquery 给div设置背景图
- jQuery中iframe的操作(点击按钮新增窗口)
- jQuery插件的写法
- jQuery阻止冒泡事件的几种方法
- jquery分页插件
- jquery中的表单验证,,,,
- 用jQuery Post json对象、java端接收并还原为查询参数对象
- 分享一个jquery插件-poshytip(模仿显示微博人的图像)
- jQuery.extend 函数详解
- 十条jQuery代码片段助力Web开发效率提升
- Jquery 页面定位的方法
- 老瓶装新酒,结合jquery来实现asp.net repeater的主从表样式(类似masterdetail控件)
- dataTables/ajax/struts2/jquery的用户管理表实现
- 高效Web开发的10个jQuery代码片段(10 JQUERY SNIPPETS FOR EFFICIENT WEB DEVELOPMENT)
- 使用jQuery+PHP+Mysql实现抽奖程序
- jQuery学习笔记
- jquery操作iframe的方法:父页面和子页面相互操作的方法