X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fcore.js;h=b8b207b71ed2359d6b94fd656cbb8d26883a4bf6;hb=4ca4ce52f76f4db64f9a8350aa60ab54eba15697;hp=7ddb2c5b0fdde1b3c50c8108d57795a019f12bc3;hpb=b850ab2b8e65eadd25093c81bbc67a881daa0488;p=jquery.git diff --git a/src/core.js b/src/core.js index 7ddb2c5..b8b207b 100644 --- a/src/core.js +++ b/src/core.js @@ -81,7 +81,7 @@ jQuery.fn = jQuery.prototype = { // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) - return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector ); + return jQuery( document ).ready( selector ); return this.setArray(jQuery.makeArray(selector)); }, @@ -338,6 +338,17 @@ jQuery.fn = jQuery.prototype = { }) ), "filter", selector ); }, + closest: function( selector ) { + return this.map(function(){ + var cur = this; + while ( cur && cur.ownerDocument ) { + if ( jQuery(cur).is(selector) ) + return cur; + cur = cur.parentNode; + } + }); + }, + not: function( selector ) { if ( typeof selector === "string" ) // test special case where just one selector is passed in @@ -898,13 +909,14 @@ jQuery.extend({ }, clean: function( elems, context, fragment ) { - var ret = [], scripts = []; context = context || document; // !context.createElement fails in IE with an error but returns typeof 'object' if ( typeof context.createElement === "undefined" ) context = context.ownerDocument || context[0] && context[0].ownerDocument || document; + var ret = [], scripts = [], div = context.createElement("div"); + jQuery.each(elems, function(i, elem){ if ( typeof elem === "number" ) elem += ''; @@ -922,7 +934,7 @@ jQuery.extend({ }); // Trim whitespace, otherwise indexOf won't work as expected - var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div"); + var tags = jQuery.trim( elem ).toLowerCase(); var wrap = // option or optgroup @@ -998,15 +1010,20 @@ jQuery.extend({ ret = jQuery.merge( ret, elem ); }); + + // Clean up + div.innerHTML = ""; if ( fragment ) { for ( var i = 0; ret[i]; i++ ) { - if ( jQuery.nodeName( ret[i], "script" ) ) { - ret[i].parentNode.removeChild( ret[i] ); + elem = ret[i]; + if ( jQuery.nodeName( elem, "script" ) ) { + if( elem.parentNode ) + elem.parentNode.removeChild( elem ); } else { - if ( ret[i].nodeType === 1 ) - ret = jQuery.merge( ret, ret[i].getElementsByTagName("script")); - fragment.appendChild( ret[i] ); + if ( elem.nodeType === 1 ) + ret = jQuery.merge( ret, elem.getElementsByTagName("script")); + fragment.appendChild( elem ); } } @@ -1138,12 +1155,12 @@ jQuery.extend({ // Also, we need to make sure that the correct elements are being returned // (IE returns comment nodes in a '*' query) if ( !jQuery.support.getAll ) { - while ( (elem = second[ i++ ]) ) + while ( (elem = second[ i++ ]) != null ) if ( elem.nodeType != 8 ) first[ pos++ ] = elem; } else - while ( (elem = second[ i++ ]) ) + while ( (elem = second[ i++ ]) != null ) first[ pos++ ] = elem; return first; @@ -1269,8 +1286,10 @@ jQuery.each({ jQuery.className.remove( this, classNames ); }, - toggleClass: function( classNames ) { - jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames ); + toggleClass: function( classNames, state ) { + if( typeof state !== "boolean" ) + state = !jQuery.className.has( this, classNames ); + jQuery.className[ state ? "add" : "remove" ]( this, classNames ); }, remove: function( selector ) {