jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
- var match, elem, ret, doc, parent;
+ var match, elem, ret, doc;
// Handle $(""), $(null), or $(undefined)
if ( !selector ) {
ret = rsingleTag.exec( selector );
if ( ret ) {
- selector = [ doc.createElement( ret[1] ) ];
+ if ( jQuery.isPlainObject( context ) ) {
+ selector = [ document.createElement( ret[1] ) ];
+ jQuery.fn.attr.call( selector, context, true );
+
+ } else {
+ selector = [ doc.createElement( ret[1] ) ];
+ }
} else {
ret = buildFragment( [ match[1] ], [ doc ] );
- parent = ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment;
- selector = [];
-
- while ( parent.firstChild ) {
- selector.push( parent.removeChild( parent.firstChild ) );
- }
+ selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
}
// HANDLE: $("#id")
jQuery.bindReady();
// If the DOM is already ready
- if ( jQuery.isReady && !readyList ) {
+ if ( jQuery.isReady ) {
// Execute the function immediately
fn.call( document, jQuery );
// Otherwise, remember the function for later
- } else {
+ } else if ( readyList ) {
// Add the function to the wait list
readyList.push( fn );
}
},
isPlainObject: function( obj ) {
- if ( toString.call(obj) !== "[object Object]" || typeof obj.nodeType === "number" ) {
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || toString.call(obj) !== "[object Object]" || !("constructor" in obj) || obj.nodeType || obj.setInterval ) {
return false;
}
- // not own constructor property must be Object
+ // Not own constructor property must be Object
if ( obj.constructor
&& !hasOwnProperty.call(obj, "constructor")
&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
return false;
}
- //own properties are iterated firstly,
- //so to speed up, we can test last one if it is own or not
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
var key;
for ( key in obj ) {}
// Mutifunctional method to get and set values to a collection
// The value/s can be optionally by executed if its a function
-function access( elems, key, value, exec, fn ) {
+function access( elems, key, value, exec, fn, pass ) {
var length = elems.length;
// Setting many attributes
if ( typeof key === "object" ) {
for ( var k in key ) {
- access( elems, k, key[k], exec, fn );
+ access( elems, k, key[k], exec, fn, value );
}
return elems;
}
exec = exec && jQuery.isFunction(value);
for ( var i = 0; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i ) : value );
+ fn( elems[i], key, exec ? value.call( elems[i], i ) : value, pass );
}
return elems;