return value !== undefined ? value : key;
},
remove: function( owner, key ) {
- var i, name,
+ var i, name, camel,
unlock = this.key( owner ),
cache = this.cache[ unlock ];
// 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 ) || [] );
}
});
});
+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 );