X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fcore.js;h=a37ae783f80d76e6293230a0a1ba7918c003af41;hb=279f77e9609fba62c11a06f8c65221b16f7bc7d4;hp=27a57283e98f44eb799cde23dfe2c2ac108a3974;hpb=ccf055033ab165c677590b42fa0ca7e0a29e9fb7;p=jquery.git diff --git a/src/core.js b/src/core.js index 27a5728..a37ae78 100644 --- a/src/core.js +++ b/src/core.js @@ -14,10 +14,8 @@ 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 - return this instanceof jQuery ? - this.init( selector, context ) : - new jQuery( selector, context ); + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.prototype.init( selector, context ); }; // Map over the $ in case of overwrite @@ -292,7 +290,7 @@ jQuery.fn = jQuery.prototype = { clone: function( events ) { // Do the clone var ret = this.map(function(){ - if ( jQuery.browser.msie ) { + if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) { // IE copies events bound via attachEvent when // using cloneNode. Calling detachEvent on the // clone will also remove the events from the orignal @@ -496,16 +494,9 @@ jQuery.fn = jQuery.prototype = { this.cloneNode( true ) : this; + // execute all scripts after the elements have been injected 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 ); - + scripts = scripts.add( elem ); } else { // Remove any inner scripts for later evaluation if ( elem.nodeType == 1 ) @@ -521,6 +512,9 @@ jQuery.fn = jQuery.prototype = { } }; +// Give the init function the jQuery prototype for later instantiation +jQuery.prototype.init.prototype = jQuery.prototype; + function evalScript( i, elem ) { if ( elem.src ) jQuery.ajax({ @@ -778,55 +772,22 @@ jQuery.extend({ }, css: function( elem, name, force ) { - if ( name == "height" || name == "width" ) { - var old = {}, height, width; - - // Revert the padding and border widths to get the - // correct height/width values - jQuery.each([ "Top", "Bottom", "Right", "Left" ], function(){ - old[ "padding" + this ] = 0; - old[ "border" + this + "Width" ] = 0; - }); - - // Swap out the padding/border values temporarily - jQuery.swap( elem, old, function() { - - // If the element is visible, then the calculation is easy - if ( jQuery( elem ).is(":visible") ) { - height = elem.offsetHeight; - width = elem.offsetWidth; - - // Otherwise, we need to flip out more values - } else { - elem = jQuery( elem.cloneNode(true) ) - .find(":radio").removeAttr("checked").removeAttr("defaultChecked").end() - .css({ - visibility: "hidden", - position: "absolute", - display: "block", - right: "0", - left: "0" - }).appendTo( elem.parentNode )[0]; - - var position = jQuery.css( elem.parentNode, "position" ) || "static"; - if ( position == "static" ) - elem.parentNode.style.position = "relative"; - - height = elem.clientHeight; - width = elem.clientWidth; - - if ( position == "static" ) - elem.parentNode.style.position = "static"; - - elem.parentNode.removeChild( elem ); - } - }); + if ( name == "width" || name == "height" ) { + var width, height, props = { position: "absolute", visibility: "hidden", display:"block" }; + + function getWH() { + width = elem.clientWidth; + height = elem.clientHeight; + } + + if ( jQuery(elem).is(":visible") ) + getWH(); + else + jQuery.swap( elem, props, getWH ); - return name == "height" ? - height : - width; + return name == "width" ? width : height; } - + return jQuery.curCSS( elem, name, force ); },