}
if ( !cache[ id ] ) {
- cache[ id ] = {};
+ // Use a Function as the cache object instead of an Object on JS objects
+ // as a hack to prevent JSON.stringify from serializing it (#8108)
+ cache[ id ] = isNode ? {} : function () {};
}
// An object can be passed to jQuery.data instead of a key/value pair; this gets
// shallow copied over onto the existing cache
- if ( typeof name === "object" ) {
+ if ( typeof name === "object" || typeof name === "function" ) {
if ( pvt ) {
cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
} else {
thisCache[ name ] = data;
}
+ // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
+ // not attempt to inspect the internal events object using jQuery.data, as this
+ // internal data object is undocumented and subject to change.
+ if ( name === "events" && !thisCache[name] ) {
+ return thisCache[ internalKey ] && thisCache[ internalKey ].events;
+ }
+
return getByName ? thisCache[ name ] : thisCache;
},