关于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 寻址,闭包,对象模型和相关问题
Apr 27 Javascript
JQuery+DIV自定义滚动条样式的具体实现
Jun 25 Javascript
JavaScript获取XML数据附示例截图
Mar 05 Javascript
JavaScript中读取和保存文件实例
May 08 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
Sep 30 Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 Javascript
Javascript中关于Array.filter()的妙用详解
Dec 04 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
Jan 02 Javascript
详解小程序云开发数据库
May 20 Javascript
vue v-for 使用问题整理小结
Aug 04 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
Nov 26 Javascript
四十九个javascript小知识实用技巧
Nov 20 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冒泡排序算法代码详细解读
2011/07/17 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
python 内置函数汇总详解
2019/09/16 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
市场营销计划书
2015/01/17 职场文书
地道战观后感400字
2015/06/04 职场文书
爱国之歌(8首)
2019/09/29 职场文书
Django实现翻页的示例代码
2021/05/24 Python
Win11查看设备管理器
2022/04/19 数码科技