코드는 다음과 같습니다.
var rootjQuery = $(document),
rquickExpr = /^(?:[^#<]*(<[wW] >)[^>]*$|#( [w-]*)$)/;
jQuery.fn = jQuery.prototype = {
init: function( selector, context, rootjQuery ) {
var match, elem, ret, doc;
// $(""), $(null), $(undefine), $(false) 처리
if ( !selector ) {
이것을 반환;
}
// $(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( 선택기 );
}
// html과 일치하거나 #id에 컨텍스트가 지정되지 않았는지 확인하세요.
// match[1]不为null,则为html字符串,match[2]不为null,则为元素id
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
if ( match[1] ) {
context = jQuery의 컨텍스트 인스턴스 ? 컨텍스트[0] : 컨텍스트;
doc = ( context && context.nodeType ? context.ownerDocument || context : 문서 ); // 如果match[1]为공간적单标签元素(如:
)且context为对象字faceweight
if ( rsingleTag.test( match[1] ) && jQuery .isPlainObject( context ) ) {
// 如果context对象不为空,则将对象中的属性添加到selector数组中仅有的dom节点中
this.attr.call( selector, context, true );
}
// merge函数的参数应该为两个数组,目数组中的项并到第一个,数组组, 🎜>//이거选择器init构造函数的实例对象,该对象继承jQuery.prototype对象中的length属性(默认为0),因此可以理解好merge函数源码
// 将selector중의 돔이 이 对象中,并返回该对象
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存재재此bug,当一个标签name和一个标签id值상等时,
// document.getElementById(# id)函数将返回提前函数将返回提前函数将返回提前函数将返回提前现的标签元素
if ( elem.id !== match[2] ) {
// 如果存在以上Bug,则返回由find函数返回的document文档的后代元素集합(합)
return rootjQuery.find( 선택기 );
}
// 그렇지 않으면 요소를 jQuery 객체에 직접 삽입합니다.
this.length = 1;
this[0] = 요소;
}
this.context = 문서;
this.selector = 선택자;
이것을 돌려주세요;
}
// HANDLE: $(expr, $(...))
// context不存재或者context为jQuery对象
} else if ( !context || context.jquery ) {
return ( context || rootjQuery ).find( 선택기 );
// HANDLE: $(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 !== 정의되지 않음 ) {
this.selector = selector.selector;
this.context = selector.context
// 当第一个参数selector为jQuery对象时,将selector中的dom节点合并到this对象中,并返回this对象
return jQuery.makeArray( selector, this );