]> source.dussan.org Git - jquery.git/commitdiff
Fixes #13850. Better removal of hyphenated data property names.
authorRick Waldron <waldron.rick@gmail.com>
Thu, 2 May 2013 20:35:22 +0000 (16:35 -0400)
committerRick Waldron <waldron.rick@gmail.com>
Thu, 2 May 2013 20:35:22 +0000 (16:35 -0400)
Signed-off-by: Rick Waldron <waldron.rick@gmail.com>
src/data.js
test/unit/data.js

index 344dae25fb5be47bb68d21e1856c066276a622a3..a9b4517886be22cabff9c80610db67d44c681e84 100644 (file)
@@ -142,7 +142,7 @@ Data.prototype = {
                return value !== undefined ? value : key;
        },
        remove: function( owner, key ) {
-               var i, name,
+               var i, name, camel,
                        unlock = this.key( owner ),
                        cache = this.cache[ unlock ];
 
@@ -160,13 +160,14 @@ Data.prototype = {
                                // This will only penalize the array argument path.
                                name = key.concat( key.map( jQuery.camelCase ) );
                        } else {
+                               camel = jQuery.camelCase( key );
                                // Try the string as a key before any manipulation
                                if ( key in cache ) {
-                                       name = [ key ];
+                                       name = [ key, camel ];
                                } else {
                                        // If a key with the spaces exists, use it.
                                        // Otherwise, create an array by matching non-whitespace
-                                       name = jQuery.camelCase( key );
+                                       name = camel;
                                        name = name in cache ?
                                                [ name ] : ( name.match( core_rnotwhite ) || [] );
                                }
index c2cfe3f3fc8d4649f3e62936fe1f91b1e6c92290..1e36ea5c5f41908a76a5185bf9aa4f88a0f48d50 100644 (file)
@@ -613,6 +613,35 @@ test(".data supports interoperable removal of hyphenated/camelCase properties",
        });
 });
 
+test(".data supports interoperable removal of properties SET TWICE #13850", function() {
+       var div = jQuery("<div>").appendTo("#qunit-fixture"),
+               datas = {
+                       "non-empty": "a string",
+                       "empty-string": "",
+                       "one-value": 1,
+                       "zero-value": 0,
+                       "an-array": [],
+                       "an-object": {},
+                       "bool-true": true,
+                       "bool-false": false,
+                       // JSHint enforces double quotes,
+                       // but JSON strings need double quotes to parse
+                       // so we need escaped double quotes here
+                       "some-json": "{ \"foo\": \"bar\" }"
+               };
+
+       expect( 9 );
+
+       jQuery.each( datas, function( key, val ) {
+               div.data( key, val );
+               div.data( key, val );
+
+               div.removeData( key );
+
+               equal( div.data( key ), undefined, "removal: " + key );
+       });
+});
+
 test( ".removeData supports removal of hyphenated properties via array (#12786)", function() {
        expect( 4 );