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
This commit is contained in:
Corey Frang 2011-09-19 21:16:20 -04:00 committed by timmywil
parent ca4133cc3f
commit 9b3768b968
3 changed files with 50 additions and 17 deletions

View File

@ -133,7 +133,7 @@ jQuery.extend({
return;
}
var thisCache,
var thisCache, i, l,
// Reference to internal data cache key
internalKey = jQuery.expando,
@ -158,12 +158,25 @@ jQuery.extend({
if ( thisCache ) {
// Support interoperable removal of hyphenated or camelcased keys
if ( !thisCache[ name ] ) {
// Support space separated names
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 );
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
// and let the cache object itself get destroyed

View File

@ -238,20 +238,18 @@ jQuery.event = {
delete events[ type ];
}
}
// Remove the expando if it's no longer used
if ( jQuery.isEmptyObject( events ) ) {
handle = elemData.handle;
if ( handle ) {
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 );
// Remove the expando if it's no longer used
if ( jQuery.isEmptyObject( events ) ) {
handle = elemData.handle;
if ( handle ) {
handle.elem = null;
}
// removeData also checks for emptiness and clears the expando if empty
// so use it instead of delete
jQuery.removeData( elem, [ "events", "handle" ], true );
}
},

View File

@ -434,7 +434,7 @@ test(".data(Object)", function() {
});
test("jQuery.removeData", function() {
expect(6);
expect(10);
var div = jQuery("#foo")[0];
jQuery.data(div, "test", "testing");
jQuery.removeData(div, "test");
@ -445,6 +445,28 @@ test("jQuery.removeData", function() {
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." );
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 = {};
jQuery.data(obj, "test", "testing");
equals( jQuery(obj).data("test"), "testing", "verify data on plain object");