jQueryソース分析の$.index関数

2279 ワード

テストコード1:
<div id="n1">
<div id="n2">
<ul id="n4">
<li id="n5">item1</li>
<li id="n6">item2</li>
<li id="n7">item3</li>
</ul>
<span id="nz"></span>
<span id="n8"></span>
</div> 
</div>
JS部
 var first=$("span").first();//      span  id="nz"
var $pre=first.prevAll();//               , n4
alert($pre.length);//    1,            。  n4      span  ,  this.first().prevAll().length 0!

テストコード2:
var reg="#n4";
//       jQuery   ,       2。             
// $("#n4")         
alert(jQuery("span").length);
//  true
alert(jQuery(reg) instanceof jQuery);

indexソース分析:
 index: function( elem ) {
// No argument, return index in parent
//    : $("li").index( )
//        ,  
if ( !elem ) {
//  ,             ,                      
return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
}
// index in selector
//          ,   :$("li").index( "#n4" )
if ( typeof elem === "string" ) {
return jQuery.inArray( this[0], jQuery( elem ) );
}
// Locate the position of the desired element
return jQuery.inArray(
// If it receives a jQuery object, the first element is used
//   jQuery      ,                     !
elem.jquery ? elem[0] : elem, this );
}

まとめ:(便宜上、呼び出し者を呼び出しオブジェクト、パラメータをパラメータオブジェクトと呼ぶ)
(1)パラメータオブジェクトがjQueryオブジェクトまたはDOMオブジェクトである場合、そのjQueryオブジェクトの最初のDOM要素または受信したDOM要素を取得し、呼び出しオブジェクトにおける彼の位置を見る
(2)パラメータオブジェクトがStringオブジェクトであれば、パラメータオブジェクトをjQueryセレクタオブジェクトにカプセル化し、呼び出しオブジェクトの最初のDOM要素のパラメータセレクタにおける位置を判断する
(3)パラメータが空の場合、呼び出し元オブジェクトの選択結果を満たす先頭の要素(例えば、$("span")が先頭のspan要素$("span")[0]を表し、先頭の$("span")[0]要素の兄弟ノードの個数)の前面のすべての同級要素の個数thisを見る.first().prevAll().length
 //    index    ,      ,                        !
   var $spans=$('span');
   var siblings=$spans.index();
   //         $('span')        ;                        !
   //         nz,         ul  
  console.log(siblings);