aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Methvin <dave.methvin@gmail.com>2011-08-25 12:23:37 -0700
committerDave Methvin <dave.methvin@gmail.com>2011-08-25 12:23:37 -0700
commit3ba72f991dccbae6020c23d6f7a65435f4ca6f03 (patch)
treeed96e4978ae66ec2456c0f18092b807a8d3f3148
parenta839af034db2bd934e4d4fa6758a3fed8de74174 (diff)
parent5d954c1b2395b0f7f9132dd76a6dd5048066db04 (diff)
downloadjquery-3ba72f991dccbae6020c23d6f7a65435f4ca6f03.tar.gz
jquery-3ba72f991dccbae6020c23d6f7a65435f4ca6f03.zip
Merge pull request #464 from dmethvin/fix-10021-relative-negative-values
Fixes #10021. Allow negative relative values for `.css()`
-rw-r--r--src/css.js17
-rw-r--r--test/unit/css.js8
2 files changed, 15 insertions, 10 deletions
diff --git a/src/css.js b/src/css.js
index efd881653..a4ca555ef 100644
--- a/src/css.js
+++ b/src/css.js
@@ -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] + 1) * +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 ( value == null || type === "number" && isNaN( value ) ) {
+ return;
+ }
+
// If a number was passed in, add 'px' to the (except for certain CSS properties)
if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
value += "px";
diff --git a/test/unit/css.js b/test/unit/css.js
index c01acdd68..acad497eb 100644
--- a/test/unit/css.js
+++ b/test/unit/css.js
@@ -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)" );