国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

jQuery源碼分析之jQuery中的循環技巧詳解

2024-05-06 16:08:39
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了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程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 康定县| 辽中县| 阳信县| 镇坪县| 咸阳市| 孟连| 湘乡市| 芜湖市| 尼木县| 牡丹江市| 闸北区| 濮阳县| 唐河县| 漳平市| 河北区| 塔城市| 东丽区| 巴塘县| 临武县| 衢州市| 高雄市| 叙永县| 定兴县| 娱乐| 成武县| 三门峡市| 汉阴县| 收藏| 太仓市| 林州市| 怀化市| 汤阴县| 莱芜市| 禹城市| 巴里| 德保县| 怀集县| 海淀区| 铜鼓县| 德令哈市| 宝兴县|