- 浏览: 1163398 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhizhen23:
LZ 提供的链接地址失效了
重写的isPlainObject方法 -
LovingBaby:
LovingBaby 写道function fun() {}f ...
读jq之二(两种扩展) -
LovingBaby:
说的很清楚!jQuery作者为了实现简洁调用的苦心!高超的编程 ...
读jq之一(jq对象的组成) -
hard_ly:
...
将伪数组转换成数组 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,例如二十六进制、十二进制又该如何 ...
用递归实现十进制数转换N进制
上篇读到了jquery库如何通过其中的jQuery.extend及jQuery.fn.extend去扩展自身的。这篇将分析下jQuery.each及jQuery().each方法。看看他们如何与jQuery.extend一起扩展jquery库。查看源码,我们发现里面有10多处用到$.each及$().each。
jQuery1.4 已发布,后续将已1.4版本作为示例。部分源码如下:
jQuery.fn = jQuery.prototype = { ... each : function(callback, args){ return jQuery.each( this, callback, args ); } ... } jQuery.extend({ ... 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 ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} } } return object; } ... });
以上可看出,
a,jQuery().each是直接挂在jQuery.prototype(jQuery.fn)上的,因此每个jquery对象都包含each方法。
b,jQuery.each是通过jQuery.extend({})方式扩展的。
上一篇已经说过,通过这种方式扩展的方法将挂在function jQuery上,即为jQuery类的静态方法。
c,jQuery().each方法中只有一句:return jQuery.each( this, callback, args )。
即jquery对象的each方法实现上其实就是调用jQuery静态的jQuery.each。因此jQuery.each才是关键所在。
下面详细分析jQuery.each。查看源码,jQuery.each方法有三个参数:object,callback,args
1:object可以为数组(Array),对象(Object),甚至是函数类型(Functoin);
2:callback是回调函数,类型为function;
3:args为jquery库自身使用,使用者不会用到该参数,这里暂不讨论该参数情况。
jQuery.each函数中第一句定义必要的变量:
var name, i = 0,length = object.length, isObj = length === undefined || jQuery.isFunction(object);
length=object.length很好理解,有三种情况length不为undefined。
a: object为数组类型(Array)时,数组具有length属性;
b: object为函数类型(Functoin)时,length为该函数定义的参数个数,如果该函数没有定义参数,length为0;
c: 具有length属性的object伪数组(如:arguments,HTMLCollection,NodeList等)。
这里特意强调下objcet为jquery对象。即当在$().each时发生,这时会将this传到$.each中。
如:return jQuery.each( this, callback, args )。这里第一个参数this即为jquery对象,每个jquery对象是具有length属性的。
变量isObj用来判断是否是对象类型,有两种情况为true:
1,变量length等于undefined,即所传object没有length属性。
2,参数object为函数类型
因为暂不考虑第三个参数args的情况(即这里只讨论不传args的情况),jQuery.each可简化为如下:
each : function(object, callback, args){ var name, i = 0, length = object.length, isObj = length === undefined || jQuery.isFunction(object); if ( isObj ) { for ( name in object ) { if ( callback.call(object[name], name, object[name]) === false ){ break; } } } else { for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} } return object; };
如果isObj为true,则用for in语句去遍历该对象,如果把每个迭代的对象看出键值对形式的话。callback中的this是值object[name],callback第一个参数是键name,第二个参数是值object[name]。
如果isObj为false,则用for循环去遍历数组(类数组)。callback中的this是数组中单独元素的值value,callback第一参数是数组的索引i,第二参数是数组单独元素值value。
callback调用后返回值如果是false则停止迭代,跳出循环。这里用严格"==="来判断是否与false相等。顺便提一下,函数如果没有显示的return,默认返回undefined。
最后总结下:
$().each的each是jquery对象的方法,实现上它调用静态的$.each。它只用来迭代jquery对象,jquery对象可以看成一个伪数组(具有length属性,用索引方式存取)。
$.each的each是function jQuery的静态方法,可以迭代对象,数组,伪数组,函数。
- jq3.zip (795 Bytes)
- 下载次数: 18
评论
这个应该可以追加参数用,相当prototype的curry()
发表评论
-
如何定制你自己的jQuery
2015-01-12 08:38 2835jQuery随着版本的不断升级代码量也随之增加,从1.0. ... -
读jQuery之二十一(队列queue)
2013-11-21 14:13 2448queue模块在jQuery中分在Effects中,搜索整个 ... -
读jQuery之二十(Deferred对象)
2013-09-24 07:23 1179Deferred对象是由$.Deferred构造的,$.D ... -
读jQuery之十九(多用途回调函数列表对象)
2013-08-08 07:39 3138$.Callbacks是在版本1.7中 ... -
jQuery1.8的几个小变化
2013-05-18 07:57 1227一,.width() 和 .height()方法 1 ... -
读jQuery之十七(attribute/property/class)
2012-04-23 07:44 1629jQuery的属性模块提供了如下方法 attr/rem ... -
读jQuery之十六(事件代理)
2012-04-21 11:45 1813事件代理的实现原理很简单:利用浏览器中事件的冒泡(eve ... -
读jQuery之十五
2012-04-21 08:27 1243在之前的event-jq-0.2.js基础上继续提取jQuer ... -
读jQuery之十三(触发事件核心方法)
2012-04-20 07:40 1693触发事件,或称模拟用户动作。比如点击,我们可以用代码去模拟用户 ... -
读jQuery之十四
2012-04-20 22:12 1284最近看完了添加事件和删除事件的核心方法,忍不住想把jQu ... -
读jQuery之十八(元素位置)
2012-04-24 07:09 1707本篇所读源码版本为1.7.2 jQuer ... -
读jQuery之十二(删除事件核心方法)
2012-04-19 13:57 1521使用jQuery删除事件(或称解除事件绑定)有三个函数:unb ... -
读jQuery之十一(添加事件核心方法)
2012-04-19 07:07 2036上一篇提到jQuery中添加 ... -
读jQuery之十(事件模块概述)
2012-04-18 14:39 1807jQuery的事件模块是较 ... -
读jQuery之九(一些瑕疵)
2012-04-18 14:34 1296jQuery1.6.1 发布有一段时间了,发现一些冗余代 ... -
读jQuery之十八(元素位置)
2012-04-18 14:27 20本篇所读源码版本为1.7.2 jQuery中提供 ... -
读jq之八(原生事件对象的修复及扩充)
2010-12-04 09:13 2382由于各个浏览器中原生事件对象的 差异性 ,多数 JS库/框 ... -
读jq之七(判断点击了鼠标哪个键)
2010-12-03 18:31 2475jQuery丢弃了标准的 button 属性采用which ... -
jq中html()方法使用不当带来的陷阱
2010-05-29 10:54 5279.html方法当不传参数时用来获取元素的html内容,查看源码 ... -
jQuery1.4.2的一些瑕疵
2010-05-05 09:31 2247jQuery1.4.2 发布有一段时间了,发现一些多余的代 ...
相关推荐
首先,jQuery的选择器是其强大的特性之一,允许我们以简洁的方式选取DOM元素。例如,"$('div')”将选取所有的`<div>`元素,而"$('.class-name')"则选取具有特定类名的元素。更进一步,"$('#id')"能根据ID选取单一...
同样,当用户在第二级选择城市后,第三级(区县)的数据也会随之更新。这种联动效果使得用户能够在不进行额外请求的情况下完成完整的地址选择。 jQuery实现这种功能的关键在于DOM操作和事件监听。插件可能包含以下...
"JQ第三方分享插件+可自定义链接、标题"这个标题揭示了一个基于jQuery的第三方分享工具,它允许开发者方便地在他们的H5页面上实现社交分享功能,并且可以定制分享的链接和标题,以满足不同场景的需求。 jQuery是一...
jq6500语音芯片是一款广泛应用在电子设备中的声音处理组件,主要负责音频数据的存储、解码和播放。这款芯片以其高效的性能、广泛的兼容性和易于编程的特点,在单片机控制的系统中得到了广泛的应用。 首先,我们来看...
在IT领域,"JQ 世界地区三级联动"是一个常见的前端开发需求,特别是在构建具有全球定位功能的网站或应用时。这个插件是基于jQuery(简称JQ)设计的,用于实现国家、省份和城市的三级联动选择效果。下面将详细阐述这...
jQuery判断导航下拉到一定高度后导航固定到头部特效,这种效果经常看到一些分享网站,其实这种效果也是很方面用户不需要返回导航可以点击自己想要去的栏目,其实原理很简单,先给浏览器绑定滚动条滚动事件,获取当前...
综上所述,JQ8900语音模块资料包提供了从基础操作到高级应用的全方位资源,涵盖了STM32、89C52和Arduino三种不同平台的控制实例,以及格式转换、音量调节、串口调试等多个方面,是开发语音相关项目的宝贵参考资料。...
`jq`是一款强大的命令行JSON处理器,用于在命令行界面中查看、操作和转换JSON数据。这个`jq安装包rpm.rar`是一个包含了`jq`工具的RPM(Red Hat Package Manager)格式的压缩包,主要面向使用Linux发行版如CentOS、...
"JQ 省市区的三级联动"是一个典型的前端开发问题,它涉及到JavaScript库jQuery(简称JQ)的运用,以及如何通过动态加载数据来实现下拉菜单的联动效果。这里我们将详细探讨这一主题。 首先,jQuery是一个轻量级的...
《JQ8400-FN/JQ8400-FL语音芯片/模块的应用解析与编程指南》 在嵌入式系统设计中,语音处理技术扮演着重要的角色,为设备提供直观的人机交互方式。JQ8400系列语音芯片就是其中的一款典型代表,适用于多种应用场景,...
jq 双日历插件日历选择器jq 双日历插件日历选择器jq 双日历插件日历选择器jq 双日历插件日历选择器jq 双日历插件日历选择器jq 双日历插件日历选择器jq 双日历插件日历选择器jq 双日历插件日历选择器jq 双日历插件...
三、串口测试程序 在开发过程中,串口测试程序是验证通信协议是否正确的重要工具。通过这个程序,我们可以发送指令给JQ8900模块,观察返回的响应,确保数据传输的准确性和实时性。同时,它也用于调试和优化通信速率...
"jq报表折线图"这个功能模块显然聚焦于利用jQuery(jq)库来实现动态和交互式的报表,特别是折线图这一图表类型。以下是关于这个主题的详细解释: **jQuery(jq)库** jQuery是一个轻量级的JavaScript库,它简化了...
文件名称"ymprompt-4.0"可能是这个jQuery弹窗插件的名字及其版本号,"ymprompt"可能是一个自定义的插件名,而"4.0"表示这是该插件的第四个主要版本,通常意味着它经过了多次迭代和优化,具有较好的稳定性和兼容性。...
本文将深入探讨如何使用`jq_code`库在前端直接生成二维码,以及其背后的技术原理和应用场景。 首先,`jq_code`是一个基于JavaScript的轻量级库,专门用于在前端生成二维码。它允许开发者在不依赖后端服务的情况下,...
《JQ8900-16P MP3语音模块芯片音乐模块:串口控制与USB直接拷贝技术详解》 在嵌入式系统和物联网应用中,语音模块扮演着重要的角色,它使得设备能够播放预录的语音或音乐,为用户提供了直观且便捷的交互方式。JQ...
完整的jq ajax提交表单,奖解压后jq文档加入页面中,调用就可惟了。 表单结构 <form id="myForm" action="comment.php" method="post"> Name: <input type="text" name="name" /> Comment: <...
### JQ8400-FL 语音模块使用说明书 V1.5 #### 模块特征 JQ8400-FL 语音模块是一款高度集成的语音播放模块,具有以下显著特点: - **硬件解码支持**:该模块支持 MP3 和 WAV 文件的硬件解码,这意味着它能够高效地...
标题中的“每三秒滚一次代码JQ”指的是使用JavaScript的jQuery库实现代码滚动效果,每隔三秒自动滚动代码展示。这种效果常用于代码演示或教程中,以便用户可以逐行查看代码,而无需手动滚动。 jQuery是一个轻量级、...