关于jQuery中的each方法(jQuery到底干了什么)


Posted in Javascript onMarch 05, 2014

1. 估计很多人都会用到jQuery中的each方法。

那就来看一看jQuery都干了些什么。

找到jquery中的each源码:

each: function( object, callback, args ) { 
var name, i = 0, 
length = object.length, 
isObj = length === undefined || jQuery.isFunction( object ); if ( args ) { 
if ( isObj ) { 
for ( name in object ) { 
if ( callback.apply( object[ name ], args ) === false ) { 
break; 
} 
} 
} else { 
for ( ; i < length; ) { 
if ( callback.apply( object[ i++ ], args ) === false ) { 
break; 
} 
} 
} 
// A special, fast, case for the most common use of each 
} else { 
if ( isObj ) { 
for ( name in object ) { 
if ( callback.call( object[ name ], name, object[ name ] ) === false ) { 
break; 
} 
} 
} else { 
for ( ; i < length; ) { 
if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { 
break; 
} 
} 
} 
} 
return object; 
},

这段代码还是比较简单的,应该没什么问题.

为了测试这个东西,我写了下面一段js;

$.each($(".demo"),function(){ 
console.log("show"); 
});

然后再加一段html:
<a href="" class="demo"></a> 
<a href="" class="demo"></a> 
<a href="" class="demo"></a>

然后拿着jQuery的源码来调试,以为能得到正确的结果。可是很遗憾。
关于jQuery中的each方法(jQuery到底干了什么) 
可以看到,这里的object竟然不是我所想要的那三个html对象,竟然是js内置的8种数据类型。

之后在jquery的源码中加了一段代码:

console.log(Object.prototype.toString(object)); 
console.log(length);

之后的输入如下:
关于jQuery中的each方法(jQuery到底干了什么) 
也就是说在文档加载的时候,jQuery会用each遍历dom对象,即使没有使用
$(function(){ 
});

当遍历指定对象之后,依旧会继续冒泡遍历父级元素。

2. 根据jQuery的源码使用回调函数参数

$.each($(".demo"),function(a,b){ 
console.log(a + "" + $(a).attr("class")); 
})

从源码可以看到:
callback.call( object[ i ], i, object[ i++ ] )

最后都将当前对象通过call方法传递给了回调函数,那么就可以像上面一样去使用当前对象中的属性。当然也可以直接用this来调用。

如果说复杂些的东西,比如,这里我是将$(".demo")作为object传递进去给$.each()

如里某些时候不是传递的jQuery或者html对象。而是一个Object或者array。

而在array中又存在很多其它的object或者方法。

这样就能弄出更多的效果。

3. 采用call或者apply实现回调模式.

从上面的代码可以看到:

callback.call(obj,args)

callback.apply([obj],args)

之类的代码,这里只需要传递callback函数,就能实现自己调用,这对于提高代码的复用程度用处不小。

但是也存在某些缺点,比如代码可读性降低,耦合程度增加等。

偶有所得,以记录之,以防忘记!

Javascript 相关文章推荐
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
Jan 06 Javascript
jQuery 三击事件实现代码
Sep 11 Javascript
iframe子页面与父页面在同域或不同域下的js通信
May 07 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
Jul 06 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
Aug 15 Javascript
jQuery构造函数init参数分析
May 13 Javascript
bootstrap网页框架的使用方法
May 10 Javascript
js 用于检测类数组对象的函数方法
May 02 Javascript
简单的React SSR服务器渲染实现
Dec 11 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
Dec 11 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
Oct 29 Javascript
小程序自定义圆形进度条
Nov 17 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
Mar 05 #Javascript
js时间比较示例分享(日期比较)
Mar 05 #Javascript
对于Form表单reset方法的新认识
Mar 05 #Javascript
js和css写一个可以自动隐藏的悬浮框
Mar 05 #Javascript
7个JS基础知识总结
Mar 05 #Javascript
100个不能错过的实用JS自定义函数
Mar 05 #Javascript
jQuery DOM操作实例
Mar 05 #Javascript
You might like
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
$()JS小技巧
2007/07/21 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
python 将字符串转换成字典dict
2013/03/24 Python
Python argv用法详解
2016/01/08 Python
Python中异常重试的解决方案详解
2017/05/05 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
Python Flask-web表单使用详解
2017/11/18 Python
python删除不需要的python文件方法
2018/04/24 Python
python实现Flappy Bird源码
2018/12/24 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
Python实现元素等待代码实例
2019/11/11 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
审计主管岗位职责
2014/01/31 职场文书
企业指导教师评语
2014/04/28 职场文书
大学班级文化建设方案
2014/05/06 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
个人合伙协议书范本
2014/10/14 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
浅析Django接口版本控制
2021/06/26 Python