( - ビデオメモ - パートIVミャオ族の味講堂)jQueryのソース解釈方法は、いくつかの拡張ツールをJQ

通訳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(){} //クラス決意アレイ(内部)

  

おすすめ

転載: www.cnblogs.com/SunlikeLWL/p/11620745.html