mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Merge pull request #432 from rwldrn/9794
Correct non-null|undefined evaluation of data property values. Fixes #9779
This commit is contained in:
commit
59936dc04d
24
src/data.js
24
src/data.js
@ -33,7 +33,9 @@ jQuery.extend({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
|
var thisCache, ret,
|
||||||
|
internalKey = jQuery.expando,
|
||||||
|
getByName = typeof name === "string",
|
||||||
|
|
||||||
// We have to handle DOM nodes and JS objects differently because IE6-7
|
// We have to handle DOM nodes and JS objects differently because IE6-7
|
||||||
// can't GC object references properly across the DOM-JS boundary
|
// can't GC object references properly across the DOM-JS boundary
|
||||||
@ -108,10 +110,24 @@ jQuery.extend({
|
|||||||
return thisCache[ internalKey ] && thisCache[ internalKey ].events;
|
return thisCache[ internalKey ] && thisCache[ internalKey ].events;
|
||||||
}
|
}
|
||||||
|
|
||||||
return getByName ?
|
|
||||||
// Check for both converted-to-camel and non-converted data property names
|
// Check for both converted-to-camel and non-converted data property names
|
||||||
thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] :
|
// If a data property was specified
|
||||||
thisCache;
|
if ( getByName ) {
|
||||||
|
|
||||||
|
// First Try to find as-is property data
|
||||||
|
ret = thisCache[ name ];
|
||||||
|
|
||||||
|
// Test for null|undefined property data
|
||||||
|
if ( ret == null ) {
|
||||||
|
|
||||||
|
// Try to find the camelCased property
|
||||||
|
ret = thisCache[ jQuery.camelCase( name ) ];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = thisCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
},
|
},
|
||||||
|
|
||||||
removeData: function( elem, name, pvt /* Internal Use Only */ ) {
|
removeData: function( elem, name, pvt /* Internal Use Only */ ) {
|
||||||
|
@ -525,3 +525,29 @@ test("jQuery.data should not miss data with preset hyphenated property names", f
|
|||||||
equal( div.data(k), k, "data with property '"+k+"' was correctly found");
|
equal( div.data(k), k, "data with property '"+k+"' was correctly found");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("jQuery.data supports interoperable hyphenated/camelCase get/set of properties with arbitrary non-null|NaN|undefined values", function() {
|
||||||
|
|
||||||
|
var div = jQuery("<div/>", { id: "hyphened" }).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,
|
||||||
|
"some-json": '{ "foo": "bar" }'
|
||||||
|
};
|
||||||
|
|
||||||
|
expect( 18 );
|
||||||
|
|
||||||
|
jQuery.each( datas, function( key, val ) {
|
||||||
|
div.data( key, val );
|
||||||
|
|
||||||
|
deepEqual( div.data( key ), val, "get: " + key );
|
||||||
|
deepEqual( div.data( jQuery.camelCase( key ) ), val, "get: " + jQuery.camelCase( key ) );
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user