Make sure that jQuery.data( elem ) always returns a data object, fixes #5971. Improve the performance of .bind() and .unbind(), fixes #5972.
This commit is contained in:
parent
942f8f7f75
commit
eed69eccc5
3 changed files with 92 additions and 58 deletions
17
src/data.js
17
src/data.js
|
@ -1,5 +1,4 @@
|
|||
var expando = "jQuery" + now(), uuid = 0, windowData = {};
|
||||
var emptyObject = {};
|
||||
|
||||
jQuery.extend({
|
||||
cache: {},
|
||||
|
@ -25,8 +24,7 @@ jQuery.extend({
|
|||
|
||||
var id = elem[ expando ], cache = jQuery.cache, thisCache;
|
||||
|
||||
// Handle the case where there's no name immediately
|
||||
if ( !name && !id ) {
|
||||
if ( !id && typeof name === "string" && data === undefined ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -40,17 +38,16 @@ jQuery.extend({
|
|||
if ( typeof name === "object" ) {
|
||||
elem[ expando ] = id;
|
||||
thisCache = cache[ id ] = jQuery.extend(true, {}, name);
|
||||
} else if ( cache[ id ] ) {
|
||||
thisCache = cache[ id ];
|
||||
} else if ( typeof data === "undefined" ) {
|
||||
thisCache = emptyObject;
|
||||
} else {
|
||||
thisCache = cache[ id ] = {};
|
||||
|
||||
} else if ( !cache[ id ] ) {
|
||||
elem[ expando ] = id;
|
||||
cache[ id ] = {};
|
||||
}
|
||||
|
||||
thisCache = cache[ id ];
|
||||
|
||||
// Prevent overriding the named cache with undefined values
|
||||
if ( data !== undefined ) {
|
||||
elem[ expando ] = id;
|
||||
thisCache[ name ] = data;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue