diff --git a/src/data.js b/src/data.js index 4f87a3550..763b3df12 100644 --- a/src/data.js +++ b/src/data.js @@ -167,6 +167,11 @@ jQuery.extend({ delete thisCache[ name ]; + // Check the actual element for predefined data-* attrs, #10027 + if ( jQuery.attr( elem, "data-" + name ) ) { + jQuery.removeAttr( elem, "data-" + name ); + } + // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( !isEmptyDataObject(thisCache) ) { diff --git a/test/unit/data.js b/test/unit/data.js index 4e21f563e..37d29bc20 100644 --- a/test/unit/data.js +++ b/test/unit/data.js @@ -568,7 +568,7 @@ test("jQuery.data supports interoperable removal of hyphenated/camelCase propert "some-json": '{ "foo": "bar" }' }; - expect( 27 ); + expect( 29 ); jQuery.each( datas, function( key, val ) { div.data( key, val ); @@ -581,4 +581,15 @@ test("jQuery.data supports interoperable removal of hyphenated/camelCase propert equal( div.data( key ), undefined, "get: " + key ); }); + + div.remove(); + + // Covers #10027 + div = jQuery("
"); + + equal( div.data("msg"), "hello", "
has expected data" ); + + div.removeData("msg"); + + equal( div.data("msg"), undefined, "data-msg removed correctly" ); });