关于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作用域容易记错的两个地方分析
Jun 22 Javascript
JS将表单导出成EXCEL的实例代码
Nov 11 Javascript
Jsonp post 跨域方案
Jul 06 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
Oct 30 Javascript
有关JavaScript中call()和apply() 的一些理解
May 20 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
Dec 02 Javascript
使用Node.js搭建静态资源服务详细教程
Aug 02 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
Vue项目自动转换 px 为 rem的实现方法
Oct 29 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
May 22 Javascript
JavaScript canvas仿代码流瀑布
Feb 10 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
短波收音机简介
2021/03/01 无线电
php 字符转义 注意事项
2009/05/27 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
js tab效果的实现代码
2009/12/26 Javascript
jquery的ajax()函数传值中文乱码解决方法介绍
2012/11/08 Javascript
页面使用密码保护代码
2013/04/10 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
vue打包的时候自动将px转成rem的操作方法
2018/06/20 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
python发送邮件实例分享
2017/07/28 Python
Python微信库:itchat的用法详解
2017/08/14 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
python查看模块,对象的函数方法
2018/10/16 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
Python 实现数组相减示例
2019/12/27 Python
Python实现汇率转换操作
2020/05/03 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
遗体告别仪式答谢词
2014/01/23 职场文书
文化宣传方案
2014/03/13 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
债务纠纷代理词
2015/05/25 职场文书
捐书仪式主持词
2015/07/04 职场文书
学前班教学反思
2016/02/24 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
Python类方法总结讲解
2021/07/26 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python