关于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 相关文章推荐
为超链接加上disabled后的故事
Dec 10 Javascript
使用JavaScript实现Java的List功能(实例讲解)
Nov 07 Javascript
JS判断不能为空实例代码
Nov 26 Javascript
JavaScript中的Function函数
Aug 27 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
Sep 22 jQuery
JS获取一个表单字段中多条数据并转化为json格式
Oct 17 Javascript
使用express+multer实现node中的图片上传功能
Feb 02 Javascript
JavaScript如何对图片进行黑白化
Apr 10 Javascript
JavaScript的级联函数用法简单示例【链式调用】
Mar 26 Javascript
vue与django集成打包的实现方法
Nov 11 Javascript
在Vue项目中使用Typescript的实现
Dec 19 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 高手之路(三)
2006/10/09 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
JS分页效果示例
2013/10/11 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
JS定义类的六种方式详解
2016/05/12 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
JS实现滑动插件
2020/01/15 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
梅西百货澳大利亚:Macy’s Australia
2017/07/26 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
员工自我鉴定
2013/10/09 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
初中英语课后反思
2014/04/25 职场文书
森林病虫害防治方案
2014/06/02 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
公司行政管理制度范本
2015/08/05 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang