]> source.dussan.org Git - jquery.git/commitdiff
Fixes #10021. Allow negative relative values for `.css()` (e.g., `"+=-20px"`) since...
authorDave Methvin <dave.methvin@gmail.com>
Tue, 16 Aug 2011 22:00:44 +0000 (18:00 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Tue, 16 Aug 2011 22:00:44 +0000 (18:00 -0400)
src/css.js
test/unit/css.js

index efd8816535702ec0b4c5a810365b40e1f1608103..da0dd20c8fca7105d358d3e16951e7d654d33287 100644 (file)
@@ -6,8 +6,7 @@ var ralpha = /alpha\([^)]*\)/i,
        rupper = /([A-Z]|^ms)/g,
        rnumpx = /^-?\d+(?:px)?$/i,
        rnum = /^-?\d/,
-       rrelNum = /^[+\-]=/,
-       rrelNumFilter = /[^+\-\.\de]+/g,
+       rrelNum = /^([+\-])=([+\-\.\de]+)/,
 
        cssShow = { position: "absolute", visibility: "hidden", display: "block" },
        cssWidth = [ "Left", "Right" ],
@@ -84,18 +83,18 @@ jQuery.extend({
                if ( value !== undefined ) {
                        type = typeof value;
 
-                       // Make sure that NaN and null values aren't set. See: #7116
-                       if ( type === "number" && isNaN( value ) || value == null ) {
-                               return;
-                       }
-
                        // convert relative number strings (+= or -=) to relative numbers. #7345
-                       if ( type === "string" && rrelNum.test( value ) ) {
-                               value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
+                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+                               value = (ret[1] === "+"? +ret[2] : -ret[2]) + parseFloat( jQuery.css( elem, name ) );
                                // Fixes bug #9237
                                type = "number";
                        }
 
+                       // Make sure that NaN and null values aren't set. See: #7116
+                       if ( type === "number" && isNaN( value ) || value == null ) {
+                               return;
+                       }
+
                        // If a number was passed in, add 'px' to the (except for certain CSS properties)
                        if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
                                value += "px";
index c01acdd685028ec82091829fe7f57885ed83d7d2..acad497ebe2b836d6fd6b2a3607a5a19d65b678f 100644 (file)
@@ -109,7 +109,7 @@ test("css(String|Hash)", function() {
 });
 
 test("css() explicit and relative values", function() {
-       expect(27);
+       expect(29);
        var $elem = jQuery("#nothiddendiv");
 
        $elem.css({ width: 1, height: 1, paddingLeft: "1px", opacity: 1 });
@@ -141,6 +141,12 @@ test("css() explicit and relative values", function() {
        $elem.css( "width", "-=9px" );
        equals( $elem.width(), 1, "'-=9px' on width (params)" );
 
+       $elem.css( "width", "-=-9px" );
+       equals( $elem.width(), 10, "'-=-9px' on width (params)" );
+
+       $elem.css( "width", "+=-9px" );
+       equals( $elem.width(), 1, "'+=-9px' on width (params)" );
+
        $elem.css({ paddingLeft: "+=4" });
        equals( $elem.css("paddingLeft"), "5px", "'+=4' on paddingLeft (hash)" );