var rootjQuery = $(document),
rquickExpr = /^(?:[^#<]*(<[wW] >)[^>]*$|#( [w-]*)$)/;
jQuery.fn = jQuery.prototype = {
init: function( selector, context, rootjQuery ) {
var match, elem, ret, doc;
// $("")、$(null)、$(unknown)、$(false) を処理します
if ( !selector ) {
return this;
}
// ハンドル $(DOMElement)
if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
これを返します;
}
// HTML 文字列を処理します
if ( typeof selector === "string" ) {
if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
// <> で始まる文字列と仮定します。 HTML であり、正規表現チェックをスキップします
match = [ null, selector, null ];
} else {
match = rquickExpr.exec( selector );
}
// html と一致するか、#id にコンテキストが指定されていないことを確認します。
// match[1] 不ヌル,则である html 字符串,マッチ[2] 不ヌル,则元素id
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
if ( match[1] ) {
context = jQuery の context インスタンス ?コンテキスト[0] : コンテキスト;
doc = ( context && context.nodeType ? context.ownerDocument || context : document );
// スクリプトは逆互換に true です。
// selector は文档碎片内の子ノード構成の数グループ
selector = jQuery.parseHTML( match[1], doc, true );
// 結果match[1]が空の单标签元素(例:
)かつコンテキストがオブジェクト文字面量である場合
if ( rsingleTag.test( match[1] ) && jQuery .isPlainObject( context ) ) {
// 結果contextオブジェクトが空でない場合、オブジェクト内のプロパティをselector数グループ内にあるdomポイント内に追加します
this.attr.call( selector, context, true );
}
// マージ関数のパラメータは 2 つの数組であり、目的は 2 番目の数組内の結合を最初の数組に結合することであり、これは 1 つの数組ではありません。
// これは選択器 init 構造関数のサンプル オブジェクト、このオブジェクトは jQuery.prototype オブジェクト内の length 属性 (0 であることが認められています) を継承しているため、merge 関数ソースコード
// セレクター内の dom がこのオブジェクトに結合されます。オブジェクトを返します
return jQuery.merge( this, selector );
// ハンドル: $(#id)
} else {
elem = document.getElementById( match[2] );
// Blackberry 4.6 が
// ドキュメントに存在しなくなったノードをキャッチするためにparentNode をチェックします #6963
if ( elem && elem.parentNode ) {
// IE が次の場合を処理しますOpera は項目を返します
// ID ではなく名前で
// ie6、7 と Opera が存在するバグ、当一标签名と一个标签id值相等の場合、
// document.getElementById(# id) 関数数は提前出现的标签元素を返します
if ( elem.id !== match[2] ) {
// 結果以上Bug が存在する場合、返還由find関数数が返される文書文档の後代元素集合
return rootjQuery.find( selector );
}
// それ以外の場合は、要素を jQuery オブジェクトに直接挿入します
this.length = 1;
this[0] = 要素;
}
this.context = ドキュメント;
this.selector = セレクター;
これを返します;
}
// HANDLE: $(expr, $(...))
// context が存在しないか、context は jQuery 对オブジェクト
} else if ( !context || context.jquery ) {
return ( context || rootjQuery ).find( selector );
// ハンドル: $(expr, context)
// (これは $(context).find(expr) と同等です
// context は className または dom 节点元素
} else {
// 等同然 jQuery(context).find(selector)
return this.constructor( context ).find( selector );
}
// 处理$(fn)== =$(document).ready(fn)
} else if ( jQuery.isFunction( selector ) ) {
return rootjQuery.ready( selector );
}
// 处理$(jQuery对象) )
if ( selector.selector !== unknown ) {
this.selector = selector.selector;
this.context = selector.context;
//当第一个パラメータselector が jQuery オブジェクトの場合、セレクター内の dom ポイントをこのオブジェクトに結合し、このオブジェクトを返します。
声明:この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。