Commit 9b3768b9 authored by Corey Frang's avatar Corey Frang Committed by timmywil

Landing pull request 512. 1.7 - removeData now takes space separated lists and...

Landing pull request 512. 1.7 - removeData now takes space separated lists and arrays of keys - Fixes #7323.

More Details:
 - https://github.com/jquery/jquery/pull/512
 - http://bugs.jquery.com/ticket/7323
parent ca4133cc
...@@ -133,7 +133,7 @@ jQuery.extend({ ...@@ -133,7 +133,7 @@ jQuery.extend({
return; return;
} }
var thisCache, var thisCache, i, l,
// Reference to internal data cache key // Reference to internal data cache key
internalKey = jQuery.expando, internalKey = jQuery.expando,
...@@ -158,12 +158,25 @@ jQuery.extend({ ...@@ -158,12 +158,25 @@ jQuery.extend({
if ( thisCache ) { if ( thisCache ) {
// Support interoperable removal of hyphenated or camelcased keys // Support space separated names
if ( !thisCache[ name ] ) { if ( jQuery.isArray( name ) ) {
name = name;
} else if ( name in thisCache ) {
name = [ name ];
} else {
// split the camel cased version by spaces
name = jQuery.camelCase( name ); name = jQuery.camelCase( name );
if ( name in thisCache ) {
name = [ name ];
} else {
name = name.split( " " );
}
} }
delete thisCache[ name ]; for ( i = 0, l = name.length; i < l; i++ ) {
delete thisCache[ name[i] ];
}
// If there is no data left in the cache, we want to continue // If there is no data left in the cache, we want to continue
// and let the cache object itself get destroyed // and let the cache object itself get destroyed
......
...@@ -238,20 +238,18 @@ jQuery.event = { ...@@ -238,20 +238,18 @@ jQuery.event = {
delete events[ type ]; delete events[ type ];
} }
}
// Remove the expando if it's no longer used // Remove the expando if it's no longer used
if ( jQuery.isEmptyObject( events ) ) { if ( jQuery.isEmptyObject( events ) ) {
handle = elemData.handle; handle = elemData.handle;
if ( handle ) { if ( handle ) {
handle.elem = null; handle.elem = null;
}
delete elemData.events;
// removeData also checks for emptiness and clears the expando if empty
// so use it instead of delete for this last property we touch here
jQuery.removeData( elem, "handle", true );
} }
// removeData also checks for emptiness and clears the expando if empty
// so use it instead of delete
jQuery.removeData( elem, [ "events", "handle" ], true );
} }
}, },
......
...@@ -434,7 +434,7 @@ test(".data(Object)", function() { ...@@ -434,7 +434,7 @@ test(".data(Object)", function() {
}); });
test("jQuery.removeData", function() { test("jQuery.removeData", function() {
expect(6); expect(10);
var div = jQuery("#foo")[0]; var div = jQuery("#foo")[0];
jQuery.data(div, "test", "testing"); jQuery.data(div, "test", "testing");
jQuery.removeData(div, "test"); jQuery.removeData(div, "test");
...@@ -445,6 +445,28 @@ test("jQuery.removeData", function() { ...@@ -445,6 +445,28 @@ test("jQuery.removeData", function() {
ok( !jQuery.data(div, "test2"), "Make sure that the data property no longer exists." ); ok( !jQuery.data(div, "test2"), "Make sure that the data property no longer exists." );
ok( !div[ jQuery.expando ], "Make sure the expando no longer exists, as well." ); ok( !div[ jQuery.expando ], "Make sure the expando no longer exists, as well." );
jQuery.data(div, {
test3: "testing",
test4: "testing"
});
jQuery.removeData( div, "test3 test4" );
ok( !jQuery.data(div, "test3") || jQuery.data(div, "test4"), "Multiple delete with spaces." );
jQuery.data(div, {
test3: "testing",
test4: "testing"
});
jQuery.removeData( div, [ "test3", "test4" ] );
ok( !jQuery.data(div, "test3") || jQuery.data(div, "test4"), "Multiple delete by array." );
jQuery.data(div, {
"test3 test4": "testing",
test3: "testing"
});
jQuery.removeData( div, "test3 test4" );
ok( !jQuery.data(div, "test3 test4"), "Multiple delete with spaces deleted key with exact name" );
ok( jQuery.data(div, "test3"), "Left the partial matched key alone" );
var obj = {}; var obj = {};
jQuery.data(obj, "test", "testing"); jQuery.data(obj, "test", "testing");
equals( jQuery(obj).data("test"), "testing", "verify data on plain object"); equals( jQuery(obj).data("test"), "testing", "verify data on plain object");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment