X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcore.js;h=10db3edafc674327750eb9bc7c1678577af80562;hb=50c40add5ab530cefbdd09dbdcb641f22b9dc26c;hp=7ac4ad75b85a7ef4b570dd2dcfd0443f023198ef;hpb=feb9051c0e29937c2494c3db0862a671efc21747;p=jquery.git diff --git a/src/core.js b/src/core.js index 7ac4ad7..10db3ed 100644 --- a/src/core.js +++ b/src/core.js @@ -323,6 +323,8 @@ jQuery.fn = jQuery.prototype = { // Copy the events from the original to the clone if ( events === true ) this.find("*").andSelf().each(function(i){ + if (this.nodeType == 3) + return; var events = jQuery.data( this, "events" ); for ( var type in events ) @@ -352,8 +354,9 @@ jQuery.fn = jQuery.prototype = { else selector = jQuery.multiFilter( selector, this ); + var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; return this.filter(function() { - return jQuery.inArray( this, selector ) < 0; + return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; }); }, @@ -418,6 +421,7 @@ jQuery.fn = jQuery.prototype = { } + return undefined; } return this.each(function(){ @@ -496,7 +500,7 @@ jQuery.fn = jQuery.prototype = { jQuery.each(elems, function(){ var elem = clone ? - this.cloneNode( true ) : + jQuery( this ).clone( true )[0] : this; // execute all scripts after the elements have been injected @@ -763,9 +767,10 @@ jQuery.extend({ // A method for quickly swapping in/out CSS properties to get correct calculations swap: function( elem, options, callback ) { + var old = {}; // Remember the old values, and insert the new ones for ( var name in options ) { - elem.style[ "old" + name ] = elem.style[ name ]; + old[ name ] = elem.style[ name ]; elem.style[ name ] = options[ name ]; } @@ -773,24 +778,29 @@ jQuery.extend({ // Revert the old values for ( var name in options ) - elem.style[ name ] = elem.style[ "old" + name ]; + elem.style[ name ] = old[ name ]; }, css: function( elem, name, force ) { if ( name == "width" || name == "height" ) { - var width, height, props = { position: "absolute", visibility: "hidden", display:"block" }; + var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; function getWH() { - width = elem.clientWidth; - height = elem.clientHeight; + val = name == "width" ? elem.offsetWidth : elem.offsetHeight; + var padding = 0, border = 0; + jQuery.each( which, function() { + padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; + border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; + }); + val -= Math.round(padding + border); } if ( jQuery(elem).is(":visible") ) getWH(); else jQuery.swap( elem, props, getWH ); - - return name == "width" ? width : height; + + return Math.max(0, val); } return jQuery.curCSS( elem, name, force ); @@ -816,6 +826,12 @@ jQuery.extend({ "1" : ret; } + // Opera sometimes will give the wrong display answer, this fixes it, see #2037 + if ( jQuery.browser.opera && name == "display" ) { + var save = elem.style.display; + elem.style.display = "block"; + elem.style.display = save; + } // Make sure we're using the right name for getting the float value if ( name.match( /float/i ) )