jqueryセレクタの原理紹介($()の使い方

2525 ワード

jQueryの対象を申明するたびに、戻ってくるのはjQuery.prototype.initの対象です。分からない人が多いです。initはjQuery.fnの方法なのに、実はここは方法ではなく、initの構成関数です。jsのプロトタイプの対象は継承できます。jsの対象は引用コピーではないです。new jQuery。new jQuery.fnとnew jQuery.fn.initのサブオブジェクトは同じですが、initに実行されているかどうかの違いがあります。
セレクタを使うと、intiではどのように実行されているかを確認します。

if ( typeof selector == "string" )
{
 // , HTML #id
    var match = quickExpr.exec( selector );
    // DOM 、 jQuery 。
 //selector #id
 if ( match && (match[1] || !context) )
 {
  // HANDLE: $(html) -> $(array)
  //HTML , clean HTML
  if ( match[1] ){
   selector = jQuery.clean( [ match[1] ], context );
  }
  // : $("#id")
  else {
   // id Dom
   var elem = document.getElementById( match[3] );
   if ( elem ){
    if ( elem.id != match[3] )
    return jQuery().find( selector );
    return jQuery( elem );// return
   }
   selector = [];
  }
  // id . context
 }
 else{
  return jQuery( context ).find( selector );
 }
}
ここではセレクタだけが$('葏id')と書く時が一番早いと説明しています。一度getElement ByIdを実行したのと同じです。後のプログラムはもう実行しなくてもいいです。もちろん、私たちが必要とするセレクタはそんなに簡単ではありません。例えば、idの下のCSSはクラスNameであり、このような書き方があります。この2つの書き方の実行結果は同じです。例えば<div id=”id><span class=”class Name>帰ってきたのはきっとclass Name>ですが、実行の効率は全然違います。
上のコードを分析してみます。このような簡単なセレクタではないなら、いずれもfind関数を実行します。findは一体使うものですか?

find: function( selector ) {
 //
 var elems = jQuery.map(this, function(elem){
  return jQuery.find( selector, elem );
 });
 // ,
 // js test
 //indexOf("..") xpath , selector
 //
 return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ?
  jQuery.unique( elems ) :
  elems );
}
このように$を書くと、拡張されたfindに実行されます。現在のthisはdocumentのjQuery配列ですから、拡張されたfindの実現を見ています。コードが多いので、列挙しません。つまり、第二のパラメータ伝達のために、documentのjQuery配列を探しています。会って.Class Nameに対して、あります:<+-などは処理します。私達は最適化したいです。第二のパラメータcontextの範囲を最小にする方法を考えていますか?それなら遍歴が少ないですか?
このように書くと、プログラムはこのようにしか実行されません。初めてinitを実行した時に、ステップgetElement ByIdを実行したら、returnを実行します。続けてfind('.className',divDcument)を実行します。divDocumentは私達が初めて選んだのが、divタグがたくさんあります。そして初めてidを選ぶ速度も遍歴よりずっと速いです。
今は皆さん分かりましたよね。つまり、第1層はIDが一番いいということではなく、簡単なセレクタを選択して、範囲を定義し、速度を上げることが目的です。