关于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的函数、创建对象、封装、属性和方法、继承
Mar 10 Javascript
js+JQuery返回顶部功能如何实现
Dec 03 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 Javascript
关闭浏览器时提示onbeforeunload事件
Dec 25 Javascript
node.js不得不说的12点内容
Jul 14 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
基于Jquery实现焦点图淡出淡入效果
Nov 30 Javascript
javascirpt实现2个iframe之间传值的方法
Jun 30 Javascript
原生JS控制多个滚动条同步跟随滚动效果
Dec 22 Javascript
详解使用vue-admin-template的优化历程
May 20 Javascript
CryptoJS中AES实现前后端通用加解密技术
Dec 18 Javascript
JavaScript常用工具函数大全
May 06 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
CI(CodeIgniter)框架介绍
2014/06/09 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
javascript引导程序
2008/10/26 Javascript
jQuery Ajax 全解析
2009/02/08 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
js多级树形弹出一个小窗口层(非常好用)实例代码
2013/03/19 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
jqTransform美化表单
2015/10/10 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
Python深度优先算法生成迷宫
2018/01/22 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
python实现取余操作的简单实例
2020/08/16 Python
python中reload重载实例用法
2020/12/15 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
法院先进个人事迹材料
2014/05/04 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
Pytest中skip skipif跳过用例详解
2021/06/30 Python