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

jQuery的源码中有很多值得学习借鉴的技巧,本文即收集了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中
}

希望本文所述对大家jQuery的WEB程序设计有所帮助。

(0)

相关推荐

  • 60个很实用的jQuery代码开发技巧收集

    由于内容比较多建议用CTRL+F搜索 偶然在网上看到这些不错的jQuery代码开发技巧.原文收集了30个,另外查找的时候发现了还有20个.加上另外十个实用的jQuery代码片段,共60个代码技巧,收集在一起分享给大家. 1. 创建一个嵌套的过滤器 .filter(":not(:has(.selected))") //去掉所有不包含class为.selected的元素 2. 重用你的元素查询 var allItems = $("div.item"); var keep

  • 30个经典的jQuery代码开发技巧

    本文实例总结了30个经典的jQuery代码开发技巧.分享给大家供大家参考.具体如下: 1. 创建一个嵌套的过滤器 复制代码 代码如下: .filter(":not(:has(.selected))") //去掉所有不包含class为.selected的元素 2. 重用你的元素查询 复制代码 代码如下: var allItems = $("div.item"); var keepList = $("div#container1 div.item")

  • Jquery技巧(必须掌握)

     检查 jQuery 是否加载 在使用 jQuery 进行任何操作之前,你需要先确认它已经加载: if (typeof jQuery == 'undefined') { console.log('jQuery hasn\'t loaded'); } else { console.log('jQuery has loaded'); } 返回顶部按钮 利用 jQuery 中的 animate 和 scrollTop 方法,你无需插件就可以创建简单的 scroll up 效果: // 返回顶部 $('

  • jQuery操作Table技巧大汇总

    本文汇总了jQuery操作Table的技巧.分享给大家供大家参考,具体如下: 1.鼠标移动行变色 方法一:jQuery中的hover(fun(),fun())方法,参数一:第一个方法是添加样式功能,参数二:第二个方法是取消样式功能 $("#table1 tr").hover(function(){ $(this).children("td").addClass("hover") },function(){ $(this).children(&qu

  • 编写高效jQuery代码的4个原则和5个技巧

    jQuery的编写原则: 一.不要过度使用jQuery 1. jQuery速度再快,也无法与原生的javascript方法相比,而且建立的jQuery对象包含的信息量很庞大.所以有原生方法可以使用的场合,尽量避免使用jQuery. 复制代码 代码如下: $("a").click(function(){    alert($(this).attr("id"));});//改良后↓$("a").click(function(){    alert(t

  • 更高效的使用JQuery 这里总结了8个小技巧

    1.DOM遍历是昂贵的,将变量缓存起来. 复制代码 代码如下: //不推荐 var h = $('#ele').height(); $('#ele').css('height', h-20); 复制代码 代码如下: //推荐 var $ele = $('#ele'); var h = $ele.height(); $ele.css('height',h-20); 2.优化选择符. 复制代码 代码如下: //不推荐 $('div#myid') 复制代码 代码如下: //推荐 $('#myid')

  • jQuery常用的一些技巧汇总

    引子 jQuery的存在,让学习前端开发的人感到前端越来越容易入门了,用简单的几行代码就可以实现需求,但是,你真的会用jQuery么,当代码运行后无法看到自己预期的效果,是不是觉得jQuery出了问题,其实,问题还是出在了自己会不会用上面.下面列举一些开发中经常遇到的应用实例,发现一下另一个不同的jQuery世界. 回到顶部按钮 利用jQuery里的animate和scrollTop方法,你便不需要使用插件创建简单的滚动到顶部动画. $('.top').click(function (e) {

  • 七个不允许错过的jQuery小技巧

    jQuery是一款轻量级的JavaScript库,是最流行的客户端HTML脚本之一,它在WEB设计师和开发者中非常的有名,并且有非常多有用的插件和技术. 本文我们将为大家分享一些jQuery小技巧: 一.在新窗口打开链接 用下面的代码,你点击链接即可在新窗口打开: $(document).ready(function() { //select all anchor tags that have http in the href //and apply the target=_blank $("a

  • 分享15个大家都熟知的jquery小技巧

    帮助提高你jQuery应用的15个大家都熟知的jquery小技巧,分享给大家 回到顶部按钮 图片预加载 判断图片是否加载完 自动修补破损图像 Hover切换class类 禁用输入 停止正在加载的链接 toggle fade/slide 简单的手风琴 使两个DIV同等高度 在浏览器标签/新窗口打开外部链接 根据文本获取元素 可见变化的触发 Ajax调用错误处理 链式操作 1.回到顶部按钮 利用jQuery里的animate和scrollTop方法,你便不需要使用插件创建简单的滚动到顶部动画. //

  • JQuery 技巧和窍门整理(8个)

    1. 新窗口打开链接 XHTML 1.0 Strict 版本不支持 target="_blank" 属性,而使用 JQuery 能很好地解决这个问题,实现新窗口打开网页: 复制代码 代码如下: $('a[@rel$='external']').click(function(){ this.target = "_blank"; }); /* Usage: <a href="http://www.mangguo.org/" rel="

  • 8个实用的jQuery技巧

    1)禁用右键单击功能如果你想为用户保护网站信息,那么开发者可以使用这段代码--禁用右键单击功能. 复制代码 代码如下: $(document).ready(function() { //catch the right-click context menu $(document).bind("contextmenu",function(e) {       //warning prompt - optional  alert("No right-clicking!")

随机推荐