Commit 190812c3 authored by Yehuda Katz's avatar Yehuda Katz

Refactor jQuery.data a bit to reduce property lookups

  - Also added jQuery.isEmptyObject
parent d36d224c
...@@ -291,6 +291,12 @@ jQuery.extend({ ...@@ -291,6 +291,12 @@ jQuery.extend({
return this.constructor.call(obj) === Object; return this.constructor.call(obj) === Object;
}, },
isEmptyObject: function( obj ) {
var name = "";
for(name in obj) break;
return !name;
},
// check if an element is in a (or is an) XML document // check if an element is in a (or is an) XML document
isXMLDoc: function( elem ) { isXMLDoc: function( elem ) {
return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
......
...@@ -8,27 +8,24 @@ jQuery.extend({ ...@@ -8,27 +8,24 @@ jQuery.extend({
windowData : windowData :
elem; elem;
var id = elem[ expando ]; var id = elem[ expando ], cache = jQuery.cache;
// Compute a unique ID for the element // Compute a unique ID for the element
if ( !id ) if(!id) id = elem[ expando ] = ++uuid;
id = elem[ expando ] = ++uuid;
// Only generate the data cache if we're // Only generate the data cache if we're
// trying to access or manipulate it // trying to access or manipulate it
if ( name && !jQuery.cache[ id ] ) if ( name && !cache[ id ] )
jQuery.cache[ id ] = {}; cache[ id ] = {};
// Prevent overriding the named cache with undefined values var thisCache = cache[ id ];
if ( data !== undefined )
jQuery.cache[ id ][ name ] = data;
if(name === true) return jQuery.cache[ id ] // Prevent overriding the named cache with undefined values
if ( data !== undefined ) thisCache[ name ] = data;
// Return the named cache data, or the ID for the element if(name === true) return thisCache
return name ? else if(name) return thisCache[name]
jQuery.cache[ id ][ name ] : else return id
id;
}, },
removeData: function( elem, name ) { removeData: function( elem, name ) {
...@@ -36,21 +33,16 @@ jQuery.extend({ ...@@ -36,21 +33,16 @@ jQuery.extend({
windowData : windowData :
elem; elem;
var id = elem[ expando ]; var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
// If we want to remove a specific section of the element's data // If we want to remove a specific section of the element's data
if ( name ) { if ( name ) {
if ( jQuery.cache[ id ] ) { if ( thisCache ) {
// Remove the section of cache data // Remove the section of cache data
delete jQuery.cache[ id ][ name ]; delete thisCache[ name ];
// If we've removed all the data, remove the element's cache // If we've removed all the data, remove the element's cache
name = ""; if( jQuery.isEmptyObject(thisCache) )
for ( name in jQuery.cache[ id ] )
break;
if ( !name )
jQuery.removeData( elem ); jQuery.removeData( elem );
} }
...@@ -67,7 +59,7 @@ jQuery.extend({ ...@@ -67,7 +59,7 @@ jQuery.extend({
} }
// Completely remove the data cache // Completely remove the data cache
delete jQuery.cache[ id ]; delete cache[ id ];
} }
}, },
queue: function( elem, type, data ) { queue: function( elem, type, data ) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment