jQueryソース分析の$.index関数
2279 ワード
テストコード1:
テストコード2:
indexソース分析:
まとめ:(便宜上、呼び出し者を呼び出しオブジェクト、パラメータをパラメータオブジェクトと呼ぶ)
(1)パラメータオブジェクトがjQueryオブジェクトまたはDOMオブジェクトである場合、そのjQueryオブジェクトの最初のDOM要素または受信したDOM要素を取得し、呼び出しオブジェクトにおける彼の位置を見る
(2)パラメータオブジェクトがStringオブジェクトであれば、パラメータオブジェクトをjQueryセレクタオブジェクトにカプセル化し、呼び出しオブジェクトの最初のDOM要素のパラメータセレクタにおける位置を判断する
(3)パラメータが空の場合、呼び出し元オブジェクトの選択結果を満たす先頭の要素(例えば、$("span")が先頭のspan要素$("span")[0]を表し、先頭の$("span")[0]要素の兄弟ノードの個数)の前面のすべての同級要素の個数thisを見る.first().prevAll().length
<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);