zoukankan      html  css  js  c++  java
  • jQuery源码分析-jQuery中的循环技巧

    Js代码  收藏代码
    1. 作者:nuysoft/JS攻城师/高云 QQ:47214707 EMail:nuysoft@gmail.com      
    2. 声明:本文为原创文章,如需转载,请注明来源并保留原文链接。  
    3. 前记:本文收集了jQuery中出现的各种遍历技巧和场景  
    Js代码  收藏代码
    1. // 简单的for-in(事件)  
    2. for ( type in events ) {  
    3.   
    4. }  
    Js代码  收藏代码
    1. // 缓存length属性,避免每次都去查找length属性,稍微提升遍历速度  
    2. // 但是如果遍历HTMLCollection时,性能提升非常明显,因为每次访问HTMLCollection的属性,HTMLCollection都会内部匹配一次所有的节点  
    3. for ( var j = 0, l = handlers.length; j < l; j++ ) {  
    4.   
    5. }  
    Js代码  收藏代码
    1. // 不比较下标,直接判断元素是否为true(强制类型转换)  
    2. var elem;  
    3. for ( var i = 0; elems[i]; i++ ) {  
    4.     elem = elems[i];  
    5.     // ...  
    6. }  
    Js代码  收藏代码
    1. // 遍历动态数组(事件),不能缓存length属性,j++之前先执行j--,保证不会因为数组下标的错误导致某些数组元素遍历不到  
    2. for ( j = 0; j < eventType.length; j++ ) {  
    3. eventType.splice( j--, 1 );  
    4. }  
    5. for ( var i = 1; i < results.length; i++ ) {  
    6.     if ( results[i] === results[ i - 1 ] ) {  
    7.         results.splice( i--, 1 );  
    8.     }  
    9. }  
    Js代码  收藏代码
    1. // 迭代过程中尽可能减少遍历次数(事件),如果你能知道从哪里开始遍历的话,这里是pos  
    2. for ( j = pos || 0; j < eventType.length; j++ ) {  
    3.   
    4. }  
    Js代码  收藏代码
    1. //倒序遍历(事件),减少了几个字符:循环条件判断,合并i自减和i取值,倒序遍历会有浏览器优化,稍微提升遍历速度  
    2. for ( var i = this.props.length, prop; i; ) {  
    3.     prop = this.props[ --i ];  
    4.     event[ prop ] = originalEvent[ prop ];  
    5. }  
    Js代码  收藏代码
    1. // 倒序遍历,中规中矩,倒序会有浏览器优化,稍微提升遍历速度  
    2. for ( j = tbody.length - 1; j >= 0 ; --j ) {  
    3.     if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {  
    4.         tbody[ j ].parentNode.removeChild( tbody[ j ] );  
    5.     }  
    6. }  
    Js代码  收藏代码
    1. //不判断下标,直接判断元素(选择器)  
    2. for ( i = 0; checkSet[i] != null; i++ ) {  
    3.     if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {  
    4.         results.push( set[i] );  
    5.     }  
    6. }  
    7. for ( ; array[i]; i++ ) {  
    8.     ret.push( array[i] );  
    9. }  
    Js代码  收藏代码
    1. // 不判断下标,取出元素然后判断元素(选择器)  
    2. for ( var i = 0; (item = curLoop[i]) != null; i++ ) {  
    3.   
    4. }  
    Js代码  收藏代码
    1. // 遍历DOM子元素  
    2. for ( node = parent.firstChild; node; node = node.nextSibling ) {  
    3.     if ( node.nodeType === 1 ) {  
    4.         node.nodeIndex = ++count;  
    5.     }  
    6. }  
    Js代码  收藏代码
    1. // 动态遍历DOM子元素(DOM遍历),dir参数表示元素的方向属性,如parentNode、nextSibling、previousSibling、lastChild和firstChild  
    2. for ( ; cur; cur = cur[dir] ) {  
    3.     if ( cur.nodeType === 1 && ++num === result ) {  
    4.         break;  
    5.     }  
    6. }  
    Js代码  收藏代码
    1. // while检查下标i  
    2. var i = promiseMethods.length;  
    3. while( i-- ) {  
    4.     obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];  
    5. }  
    Js代码  收藏代码
    1. // while检查元素  
    2. while( (type = types[ i++ ]) ) {  
    3.   
    4. }  
    Js代码  收藏代码
    1. // while遍历动态数组(AJAX),总是获取第一个元素,检查是否与特殊值相等,如果相等就从数组头部移除,直到遇到不相等的元素或数组为空  
    2. while( dataTypes[ 0 ] === "*" ) {  
    3.     dataTypes.shift();  
    4.     if ( ct === undefined ) {  
    5.         ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );  
    6.     }  
    7. }  
    Js代码  收藏代码
    1. // while遍历动态数组(异步队列),总是获取第一个元素,直到数组为空,或遇到值为undefined的元素  
    2. while( callbacks[ 0 ] ) {  
    3.     callbacks.shift().apply( context, args );  
    4. }  
    Js代码  收藏代码
    1. // while反复调用RegExp.exec(AJAX),能够否反复调是exec比re.test、String.match更加强大的原因,每次调用都将lastIndex属性设置到紧接着匹配字符串的字符位置  
    2. while( ( match = rheaders.exec( responseHeadersString ) ) ) {  
    3.     responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; // 将响应头以key-value的方式存在responseHeaders中  
    4. }  
     
  • 相关阅读:
    LeetCode: Reverse Words in a String && Rotate Array
    LeetCode: Maximum Product Subarray && Maximum Subarray &子序列相关
    =new、=null、.clear()、system.gc()的区别
    对象转字符串的效率问题
    Java遍历Map对象的四种方式
    JDK升级
    eclipse的任务列表
    统一修改数据库表名字段大小写
    get传数组
    vue编辑回显问题
  • 原文地址:https://www.cnblogs.com/xiaochao12345/p/3822300.html
Copyright © 2011-2022 走看看