`
nuysoft
  • 浏览: 521057 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
91bd5d30-bd1e-3b00-9210-87db1cca0016
jQuery技术内幕
浏览量:200743
社区版块
存档分类
最新评论

[原创] jQuery源码分析-jQuery中的循环技巧

阅读更多
作者:nuysoft/JS攻城师/高云 QQ:47214707 EMail:nuysoft@gmail.com    
声明:本文为原创文章,如需转载,请注明来源并保留原文链接。
前记:本文收集了jQuery中出现的各种遍历技巧和场景
// 简单的for-in(事件)
for ( type in events ) {

}
// 缓存length属性,避免每次都去查找length属性,稍微提升遍历速度
// 但是如果遍历HTMLCollection时,性能提升非常明显,因为每次访问HTMLCollection的属性,HTMLCollection都会内部匹配一次所有的节点
for ( var j = 0, l = handlers.length; j < l; j++ ) {

}
// 不比较下标,直接判断元素是否为true(强制类型转换)
var elem;
for ( var i = 0; elems[i]; i++ ) {
	elem = elems[i];
	// ...
}
// 遍历动态数组(事件),不能缓存length属性,j++之前先执行j--,保证不会因为数组下标的错误导致某些数组元素遍历不到
for ( j = 0; j < eventType.length; j++ ) {
eventType.splice( j--, 1 );
}
for ( var i = 1; i < results.length; i++ ) {
	if ( results[i] === results[ i - 1 ] ) {
		results.splice( i--, 1 );
	}
}
// 迭代过程中尽可能减少遍历次数(事件),如果你能知道从哪里开始遍历的话,这里是pos
for ( j = pos || 0; j < eventType.length; j++ ) {

}
//倒序遍历(事件),减少了几个字符:循环条件判断,合并i自减和i取值,倒序遍历会有浏览器优化,稍微提升遍历速度
for ( var i = this.props.length, prop; i; ) {
	prop = this.props[ --i ];
	event[ prop ] = originalEvent[ prop ];
}
// 倒序遍历,中规中矩,倒序会有浏览器优化,稍微提升遍历速度
for ( j = tbody.length - 1; j >= 0 ; --j ) {
	if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
		tbody[ j ].parentNode.removeChild( tbody[ j ] );
	}
}
//不判断下标,直接判断元素(选择器)
for ( i = 0; checkSet[i] != null; i++ ) {
	if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
		results.push( set[i] );
	}
}
for ( ; array[i]; i++ ) {
	ret.push( array[i] );
}
// 不判断下标,取出元素然后判断元素(选择器)
for ( var i = 0; (item = curLoop[i]) != null; i++ ) {

}
// 遍历DOM子元素
for ( node = parent.firstChild; node; node = node.nextSibling ) {
	if ( node.nodeType === 1 ) {
		node.nodeIndex = ++count;
	}
}
// 动态遍历DOM子元素(DOM遍历),dir参数表示元素的方向属性,如parentNode、nextSibling、previousSibling、lastChild和firstChild
for ( ; cur; cur = cur[dir] ) {
	if ( cur.nodeType === 1 && ++num === result ) {
		break;
	}
}
// while检查下标i
var i = promiseMethods.length;
while( i-- ) {
	obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
}
// while检查元素
while( (type = types[ i++ ]) ) {

}
// while遍历动态数组(AJAX),总是获取第一个元素,检查是否与特殊值相等,如果相等就从数组头部移除,直到遇到不相等的元素或数组为空
while( dataTypes[ 0 ] === "*" ) {
	dataTypes.shift();
	if ( ct === undefined ) {
		ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
	}
}
// while遍历动态数组(异步队列),总是获取第一个元素,直到数组为空,或遇到值为undefined的元素
while( callbacks[ 0 ] ) {
	callbacks.shift().apply( context, args );
}
// while反复调用RegExp.exec(AJAX),能够否反复调是exec比re.test、String.match更加强大的原因,每次调用都将lastIndex属性设置到紧接着匹配字符串的字符位置
while( ( match = rheaders.exec( responseHeadersString ) ) ) {
	responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; // 将响应头以key-value的方式存在responseHeaders中
}

 
13
2
分享到:
评论
6 楼 it_boy1986 2013-04-18  
奥巴马 写道
拉登
5 楼 it_boy1986 2013-04-18  
刘德华 写道
我看好你哟!!~~~~~~~~~~~~~~~~

测试
4 楼 nuysoft 2011-11-24  
晨曦的朝阳 写道
简单补充一点:
for ( type in events ) { 
}
上面这种循环有个不好的地方就是会把原型的属性和方法也给遍历出来,所以如果使用
这种方式,经常会结合obj.hasOwnProperty来进行判断。

thx
3 楼 晨曦的朝阳 2011-11-24  
简单补充一点:
for ( type in events ) { 
}
上面这种循环有个不好的地方就是会把原型的属性和方法也给遍历出来,所以如果使用
这种方式,经常会结合obj.hasOwnProperty来进行判断。
2 楼 ywxowen999 2011-10-28  
楼主总结的很到位,收益了。
1 楼 zui4yi1 2011-10-27  
学习了,这么多技巧

相关推荐

    jQuery源码分析系列.pdf

    ### jQuery源码分析系列知识点概览 #### 一、总体架构与核心概念 - **前言开光**:介绍分析jQuery源码的目的和价值,强调通过深入研究源码,可以学习到先进的设计理念和实践技巧。 - **总体架构**:解析jQuery的...

    jQuery播放器插件-jPlayer V2.0源码.rar

    在实际应用中,`jPlayer V2.0`的源码分析对于开发者来说至关重要。通过对源码的学习,我们可以了解到播放器的工作原理,如何与`jQuery`库进行交互,以及如何扩展和优化其功能。这对于提升自己的JavaScript和`jQuery`...

    jQuery源码分析之Callbacks详解

    在深入讨论jQuery源码中Callbacks模块的内部实现之前,先要明确什么是Callbacks以及它在JavaScript编程中的作用。Callbacks,即回调函数,在JavaScript中扮演着至关重要的角色。由于JavaScript是基于单线程事件循环...

    jQuery源码分析之jQuery中的循环技巧详解

    在深入分析jQuery源码中的循环技巧之前,先简单介绍一下jQuery是什么。jQuery是一个快速、小巧、功能丰富的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互等操作。由于它的轻量级和简洁性,使得...

    精通JavaScript+jQuery电子书+源码-部分3

    JavaScript和jQuery是Web开发中的两个重要工具,它们极大地简化了网页动态化和交互性设计。JavaScript是一种轻量级的解释型编程语言,广泛应用于浏览器端,用于处理用户输入、操作DOM(文档对象模型)、实现页面动画...

    jQuery源码分析系列_1.6

    ### jQuery源码分析系列_1.6 #### 一、前言 在现代Web开发领域,jQuery无疑是一款具有里程碑意义的JavaScript库。它通过简洁、强大的API极大地简化了DOM操作、事件处理、Ajax交互以及动画等功能,使得前端开发变得...

    Jquery1.2.6源码分析

    《jQuery 1.2.6源码分析》 在JavaScript的世界里,jQuery是一个不可或缺的库,它极大地简化了DOM操作、事件处理、动画效果以及Ajax交互。本文将深入剖析jQuery 1.2.6版本的源码,揭示其背后的机制与设计理念,帮助...

    jquery源码 详细中文注释

    通过对这份带有详细中文注释的jQuery源码进行深入学习,不仅可以帮助我们掌握更多高级JavaScript编程技巧,还能让我们更好地理解jQuery的设计理念和技术栈。未来,随着Web技术的发展,虽然像React、Vue这样的现代...

    JavaScript+jQuery程序设计 源码

    通过分析和实践这个"JavaScript+jQuery程序设计 源码",学习者不仅能巩固JavaScript和jQuery的基础知识,还能提升实际项目开发经验,尤其是处理网页交互和动态效果的能力。同时,这也将有助于理解和应用更多高级特性...

    基于jQuery开发的javascript模板引擎-jTemplates

    源码分析 `jquery-jtemplates_uncompressed.js`是未压缩的源码版本,开发者可以通过阅读源码了解jTemplates的内部实现机制,如模板解析、数据绑定和DOM操作等。 ### 6. CSS样式 `TemplateCSS.css`可能是为示例...

    jquery 坦克大战源码

    《jQuery坦克大战源码解析与游戏开发技术探析》 jQuery坦克大战是一款基于JavaScript和jQuery库开发的在线游戏,它...通过分析和学习这个游戏的源码,开发者可以提升自己的前端技能,更好地掌握Web游戏的开发技巧。

    精通JavaScript+jQuery_5+实例源码

    通过分析和运行这些源码,你可以理解JavaScript和jQuery在实际项目中的应用,包括但不限于页面动态更新、表单验证、数据交互、动画效果的实现等。同时,这些实例也提供了学习调试、优化和解决实际问题的机会。 总之...

    jQuery each函数源码分析_.docx

    《jQuery each函数源码分析》 jQuery库中的`each`函数是其核心功能之一,它提供了遍历数组和对象的能力,使得开发者能够方便地对集合中的每个元素进行操作。在这个文档中,我们将深入探讨`each`函数的源码,了解其...

    精通JavaScript+jquery 源码

    通过阅读和分析《精通JavaScript+jQuery》书籍的源码,你可以深入理解这些概念的实际应用,看到它们如何在实际项目中发挥作用。源码中可能包含各种示例和练习,帮助你巩固理论知识,提高动手能力。同时,分析源码也...

    jQuery图片浏览器源码

    四、源码分析与学习 理解jQuery图片浏览器源码有助于开发者定制自己的图片查看器,包括: 1. 了解文件结构:源码可能包含HTML模板、CSS样式表和JavaScript脚本。 2. 分析核心函数:找出处理图片切换、动画效果、事件...

    javascript源码大全------

    这个"javascript源码大全 .chm"文件很可能包含了上述知识点的实例代码,通过阅读和分析这些代码,开发者可以加深对JavaScript的理解,提高编程技能。同时,CHM文件是一种Windows下的帮助文档格式,通常包含索引、...

    糗事百科源码81-100

    在实际的源码分析过程中,我们将关注以下几个方面: 1. **架构设计**:查看代码结构,了解整体的设计模式和框架,如MVC(模型-视图-控制器)或微服务架构,以及它们如何协同工作。 2. **数据处理**:分析数据库...

Global site tag (gtag.js) - Google Analytics