jQuery物件初始化的傳參方式包括:
1.$(DOMElement)
2.$('
...
'), $('#id'), $('.class') 傳入字串, 這是最常見的形式, 這種傳參數經常也傳入第二個參數context指定上下文,其中context參數可以為$(...), DOMElement
3.$(function() {}); $(document).ready(function() { });
4.$({selector : '.class', context : context}) $('.class', context)
jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
var match, elem, ret, doc;
// 處理$(""), $(null), $(undefined), $(false)這幾種參數,直接回傳this
if ( !selector ) {
return this;
}
// 當傳參selector為DOM結點,將context置為selector
if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
return this;
}
// Handle HTML strings
// 當傳入的selector參數為字串時,
if ( typeof selector === "string" ) {
if ( selector.charAt(0) === "" && selector.length >= 3 ) {
// Assume that strings that start and end with are HTML and skip the regex check
match = [ null, selector, null ];
} else {
match = rquickExpr.exec( selector );
}
// Match html or make sure no context is specified for #id
if ( match && (match[1] || !context) ) {
// HANDLE: $(html) -> $(array)
if ( match[1] ) {
context = context instanceof jQuery ? context[0] : context;
doc = ( context && context.nodeType ? context.ownerDocument || context : document );
// scripts is true for back-compat
selector = jQuery.parseHTML( match[1], doc, true );
if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
this.attr.call( selector, context, true);
}
return jQuery.merge( this, selector );
// HANDLE: $(#id)
} else {
elem = document.getElementById( match[2] );
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
if ( elem && elem.parentNode ) {
// 處理 IE 與 Opera 回復專案的狀況
// 以名稱而非 ID
if ( elem.id !== match[2] ) {
return rootjQuery.find( 選擇者 );
}
// 否則,且我們將元素直接注入 jQuery 物件中
this.length = 1;
this[0] = elem;
}
this.context = 文檔;
this.selector = 選擇者;
請使用此;
}
// 句柄:$(expr, $(...))
} else if ( !context || context.jquery ) {
return ( context || rootjQuery ).find( 選擇者 );
// 句柄:$(expr, context)
// (相當於:$(context).find(expr)
} 其他 {
return this.constructor( context ).find( 選擇者 );
}
// 句柄:$(function)
// 文件準備好的捷徑
// 當selector為function時相當於$(document).ready(selector);
} else if ( jQuery.isFunction( 選擇器 ) ) {
return rootjQuery.ready( 選擇者 );
}
//當selector參數為{selector:'#id', context:document}之類時,重置屬性selector和context
if ( 選擇器.selector !== 未定義 ) {
this.selector = 選擇者.selector;
this.context = 選擇者.context;
}
return jQuery.makeArray( 選擇者, this );
}
};
以上就是本文的全部內容了,希望大家能夠喜歡。