X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fcore.js;h=d27dcb9fd19506ff07cedb2913aeba337b099bbd;hb=32b3ac4f063571257b36477cc5dcb659cac2c357;hp=3b0c46567edfcd1aa58421d2f4765042a7573606;hpb=92a9e73bbef6f995c4b4fc6fb6c566432f2d0671;p=jquery.git diff --git a/src/core.js b/src/core.js index 3b0c465..d27dcb9 100644 --- a/src/core.js +++ b/src/core.js @@ -10,8 +10,8 @@ */ // Map over jQuery in case of overwrite -if ( typeof jQuery != "undefined" ) - var _jQuery = jQuery; +if ( window.jQuery ) + var _jQuery = window.jQuery; var jQuery = window.jQuery = function( selector, context ) { // If the context is a namespace object, return a new object @@ -21,8 +21,8 @@ var jQuery = window.jQuery = function( selector, context ) { }; // Map over the $ in case of overwrite -if ( typeof $ != "undefined" ) - var _$ = $; +if ( window.$ ) + var _$ = window.$; // Map the jQuery namespace to the '$' one window.$ = jQuery; @@ -331,7 +331,12 @@ jQuery.fn = jQuery.prototype = { }, add: function( selector ) { - return this.pushStack( jQuery.merge( this.get(), jQuery( selector ) ) ); + return this.pushStack( jQuery.merge( + this.get(), + selector.constructor == String ? + jQuery( selector ).get() : + selector.length != undefined && (!selector.nodeName || jQuery.nodeName(selector, "form")) ? + selector : [selector] ) ); }, is: function( selector ) { @@ -402,7 +407,7 @@ jQuery.fn = jQuery.prototype = { jQuery.inArray( this.text, values ) >= 0); }); - if ( !tmp.length ) + if ( !values.length ) this.selectedIndex = -1; } else @@ -456,39 +461,51 @@ jQuery.fn = jQuery.prototype = { if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) ) obj = this.getElementsByTagName("tbody")[0] || this.appendChild( document.createElement("tbody") ); + var scripts = jQuery( [] ); + jQuery.each(elems, function(){ var elem = clone ? this.cloneNode( true ) : this; - if ( !evalScript( 0, elem ) ) + if ( jQuery.nodeName( elem, "script" ) ) { + + // If scripts are waiting to be executed, wait on this script as well + if ( scripts.length ) + scripts = scripts.add( elem ); + + // If nothing is waiting to be executed, run immediately + else + evalScript( 0, elem ); + + } else { + // Remove any inner scripts for later evaluation + if ( elem.nodeType == 1 ) + scripts = scripts.add( jQuery( "script", elem ).remove() ); + + // Inject the elements into the document callback.call( obj, elem ); + } }); + + scripts.each( evalScript ); }); } }; function evalScript( i, elem ) { - var script = jQuery.nodeName( elem, "script" ); - - if ( script ) { - if ( elem.src ) - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - - else - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - - if ( elem.parentNode ) - elem.parentNode.removeChild( elem ); + if ( elem.src ) + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); - } else if ( elem.nodeType == 1 ) - jQuery( "script", elem ).each( evalScript ); + else + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - return script; + if ( elem.parentNode ) + elem.parentNode.removeChild( elem ); } jQuery.extend = jQuery.fn.extend = function() { @@ -499,8 +516,14 @@ jQuery.extend = jQuery.fn.extend = function() { if ( target.constructor == Boolean ) { deep = target; target = arguments[1] || {}; + // skip the boolean and the target + i = 2; } + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target != "object" ) + target = {}; + // extend jQuery itself if only one argument is passed if ( length == 1 ) { target = this; @@ -513,12 +536,12 @@ jQuery.extend = jQuery.fn.extend = function() { // Extend the base object for ( var name in options ) { // Prevent never-ending loop - if ( target == options[ name ] ) + if ( target === options[ name ] ) continue; // Recurse if we're merging object values - if ( deep && typeof options[ name ] == "object" && target[ name ] ) - jQuery.extend( target[ name ], options[ name ] ); + if ( deep && typeof options[ name ] == "object" && target[ name ] && !options[ name ].nodeType ) + target[ name ] = jQuery.extend( target[ name ], options[ name ] ); // Don't bring in undefined values else if ( options[ name ] != undefined ) @@ -564,15 +587,19 @@ jQuery.extend({ data = jQuery.trim( data ); if ( data ) { - if ( window.execScript ) - window.execScript( data ); - - else if ( jQuery.browser.safari ) - // safari doesn't provide a synchronous global eval - window.setTimeout( data, 0 ); - + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.getElementsByTagName("head")[0] || document.documentElement, + script = document.createElement("script"); + + script.type = "text/javascript"; + if ( jQuery.browser.msie ) + script.text = data; else - eval.call( window, data ); + script.appendChild( document.createTextNode( data ) ); + + head.appendChild( script ); + head.removeChild( script ); } }, @@ -744,7 +771,7 @@ jQuery.extend({ // Otherwise, we need to flip out more values } else { elem = jQuery( elem.cloneNode(true) ) - .find(":radio").removeAttr("checked").end() + .find(":radio").removeAttr("checked").removeAttr("defaultChecked").end() .css({ visibility: "hidden", position: "absolute", @@ -837,7 +864,7 @@ jQuery.extend({ // one special, otherwise get the value ret = name == "display" && swap[ stack.length - 1 ] != null ? "none" : - document.defaultView.getComputedStyle( elem, null ).getPropertyValue( name ) || ""; + ( getComputedStyle && getComputedStyle.getPropertyValue( name ) ) || ""; // Finally, revert the display styles back for ( var i = 0; i < swap.length; i++ ) @@ -944,18 +971,18 @@ jQuery.extend({ div.firstChild && div.firstChild.childNodes : // String was a bare or
- wrap[1] == "