通訳jQueryのソース JQいくつかの方法で拡張ツール(ミャオ族の味講堂-ビデオメモ-パートIV) 。1、parseJSON() JSONのJSON.parse()//解析文字列型の 2、のeval()//任意の形式のJSONを解析し、パフォーマンスの低下 3、parseXML()は、文字列のDOMオブジェクトを回す// 達成するために//ソース parseXML:機能(データ){ VARのXML、TMPを、 IF(typeof演算||データデータ== "文字列" !!){ nullを返します; / /文字列型のみを解析 } 試し{ tmpに=新しい新しいDOMParserには(); // IE9 + XML = tmp.parseFromString(データ、 "テキスト/ XML"); } キャッチ(E){ XML = NULL; } IF(XMLを! xml.getElementsBysTagName ||( "parsererror")の長さ){。 jQuery.error( "無効なXML:"データ+); } 戻りXML; } 4、globalEval() 関数のテスト(){ VARのnewVar = TRUE } テスト(); console.log(newVar)//报错 関数TEST1(){ globalEval( "VARのnewVar =真")。 } にconsole.log(newVar)//真 //解析全局变量 globalEval:機能(コード){ VARスクリプト。間接的= evalの。 コード= jQuery.trim(コード) する場合(コード){ IF(code.indexOf( "厳密な使用")== 1){ スクリプト=のdocument.createElement("スクリプト")。 script.text =コード。 document.head.appendChild(スクリプト).parentNode.removeChild(スクリプト); } 他{ indirecct(コード)。 } } } 6、キャメルケース()//转驼峰 7、nodeNameの(); //是否制定节点名 8、それぞれの()//遍历 VAR ARR = [1、2、34、34、343]。 $ .each(arr.function(I、値){ にconsole.log(値) }) //源码实现 それぞれ:関数(OBJ、コールバック、引数){ VAR値、 I = 0、 長さ= obj.length、 でIsArray = isArraylike(OBJ)。 IF(引数){ (でIsArray){場合 のために(; iは長さ<; iは++){ 値= callback.apply(OBJ [i]は、引数)。 IF(値===偽){ breack。 } } } そうでなければ{ (でIsArray){場合 のために(; iは長さ<; iは++){ = callback.call値(OBJ [I]、I、OBJ [I]); IF(falseに===値){ BREAK; } } } 他{ (I OBJで)のための{ 値= callback.call(OBJ [ I]、I、OBJ [I]); IF(falseに===値){ BREAK; } } } } } } フロント10、トリム()//ストリップスペース //ソース実装 TRIM:機能(テキスト){ リターン===ヌルテキスト"":core_trim.call(テキスト)? } 11、makeArray(); //クラス配列、文字列、JSONスイッチアレイ。 makeArray:関数(ARR、結果){ VAR結果|| RET = [] ; (もし!ARR = NULL){ 場合(isArraylike(オブジェクト(ARR))){ //マージ拼接数组 jQuery.merge(RET、typeof演算ARR === "文字列" [ARR]:?ARR) } 他{ //单个直接プッシュ core_push.call(RET、ARR)。 } } 戻りRET。 } //判断类数组 12、 関数isArraylike(OBJ){ VAR長= obj.length。 タイプ= jQuery.type(OBJ)。 IF(jQuery.isWindow(OBJ)){ 偽reutrn。 } {(obj.nodeType === 1 &&長さ)であれば falseを返します。 } 戻り型===「アレイ」|| タイプ!== "機能" &&( 長=== 0 || typeof演算長=== "数" &&長さ> 0 && スプライシングの//配列 マージ:関数(第一、第二){ VARのF = first.length; VAR second.length = I; VARのJ = 0; IF(typeof演算のL === "ナンバー"){//属性は長さ決定タイプが配列または配列、JSONない長さではない持っている (; J <長さ; jについて ++){ 最初の[I ++] =次の[J] } } 他{ //次の[J ++] 0,1,2,3添字JSONの 一方(SECOND [J]!=不定){ 最初の[I ++] = SECOND [J ++ ]; } } first.length = I; まず返す; } //存在キー InArrayバリ(キー); //配列 のindexOf(キー); //文字列 14 のgrep(); //新しいアレイフィルタ //インスタンス VARのARRを= [1,2,3,4]; $ .grep(ARR、関数(N、I){ リターンN> 2;新しい配列リターンとして2より大きい//値 }、 トゥーレ//逆の値、2未満戻る新しい配列の値として ) //ソース実装 はgrep:関数(elems、コールバック、INV){ VARのRETVAL 、 RET = []、 I = 0、 長さ= elems.length、 INV INV = !!; のための(; Iは、長さを<; Iは++){ RETVALコールバック= !!(elemes [I]、I); IF(INV = RETVAL ==){ ret.push(elems [I]) } } } 戻りRET; } //マップ マップ:関数(elems、コールバック、引数){ VAR値、 I = 0、 長さ= elems.length、 でIsArray = isArraylike(elemes)、 RET = []、 (でIsArray){場合 のために(; iは長さ<; iは++){ 値=コールバック( elems [i]は、I、引数)。 IF(!値= NULL){ RET [ret.length] =値。 } } } そうでなければ{ (I elemesで){ための 値=コールバック(elems [i]は、I、引数)。 IF(!値= NULL){ RET [ret.length] =値。 } } } //ネストされたアレイは、展平任何嵌套数组平坦化 ([]、RET)core_concat.apply返します。 } 。GUID 1; //グローバルに一意なオブジェクト識別子 プロキシ(); //この点を修正するために (N){関数ショー にconsole.log(N-) にconsole.log (この)。 } を表示する(1); //このウィンドウのポイント の$ .proxy(表示、文献,. 1)(); //この時点ドキュメント の$ .proxy(ショー、文献)(1); //この時点文献 //の二種類パラメータの受け渡し $ .proxy(OBJ、 "ショー")== $ .proxy(obj.show、OBJ); //ソース実装の プロキシ:機能(FN、コンテキスト){ VARのTMP、引数、プロキシ; IF(typeof演算コンテキスト= == "stirng"){ TMP =のFn [contenxt]; コンテキスト=のFn、 FnはTMPを=; } (jQuery.isFunction(FN!)IF){ 未定義返す; } //パラメータの第三の組み合わせパラメータの開始から通過 // core_slice.call(引数)スイッチアレイ fn.apply返す(コンテキスト||この、args.concat (core_slice.call(引数))) (2、引数)引数= core_slice.call 。 プロキシ=関数(){ } // GUID唯一标识 proxy.guid = fn.guid || jQuery.guid ++。 プロキシを返します。 } アクセス(); //多功能值操作 。。$()CSS()ATTR(); // get.set操作 。$( "div要素")、CSS( "色"); //获取 $( "div要素")の.css("色」、 "赤")。 //对象 $( "DIV")、CSS({ 背景: "赤"、 色"白" }) //源码实现 アクセス:関数(elems、FN、キー、値、チェーン可能、emptyGet、生){ VAR I = 0、 長さ= elems.length、 バルク=キー== NULL。 //設定多くの値 であれば(jQuery.type(キー)=== "オブジェクト"){ = TRUEチェーン可能。 jQuery.access(elems、FN、私、キー[i]は、真、emptyGet、生) それ以外の場合{(値==未定義!) =真チェーン可能。 もし(jQuery.isFunction(値)!){//不是函数 =真生。 } IF(バルク){//有バルク值字符串 (生){もし fn.call(elems、値)。 FN = NULL; } //値是函数的情况{他 FN =バルク。 FN =関数(ELEM、キー、値){ 戻りbulk.call(jQueryの(ELEM)、値)。 } } } IF(FN){// ため(; iは長さ<; iは++){ FN(elems [i]は、キー、生値:value.call(elems [i]は、I、FN(elems [i]は、キー))) } } } // SET一つの値 } //現在の時刻を取得し、時間は日新新()getTime()をスタンプ; 今(); // Date.now $(「div要素」)の幅を(); //表示を得ることができ、視認性=への表示の要素のどれも:隠された;位置:絶対; $( "DIV")(0).offfsetWidthを()を得る; //要素の=表示なしを取得することはできません。 属性あるいは//ノードを取得する属性 スワップ:関数(ELEM、オプション、コールバック、引数){ VAR RET、名前、 旧= {}; //新しいノード要素の属性値 (オプションのname){ための 古い[名前] = elem.style [名]; elem.style [名] = optons [名前] ; } RET = callback.apply(ELEM、アルギニン|| []); //取得するプロパティ値 //古い属性は、バックノード要素にリセット 中(名のオプション){ elem.style [名前]旧= [名前]; } 戻りRET; } jQuery.ready.promise =関数(){} // DOM検出ステップの測定動作(内部) 関数isArraylike(){} //クラス決意アレイ(内部)