X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fdata.js;h=732e9233b8a18131ecdbc77f68908524e6bee88b;hb=a2aefbf3b198620ae45d2451d21cc5bf96258a7d;hp=448e243931bffaf60340cd7d628b046ae286b9a3;hpb=76db8a98220b6d76e98536b9578919bfb70048ed;p=jquery.git diff --git a/src/data.js b/src/data.js index 448e243..732e923 100644 --- a/src/data.js +++ b/src/data.js @@ -1,8 +1,7 @@ (function( jQuery ) { var windowData = {}, - rbrace = /^(?:\{.*\}|\[.*\])$/, - rdigit = /\d/; + rbrace = /^(?:\{.*\}|\[.*\])$/; jQuery.extend({ cache: {}, @@ -31,18 +30,17 @@ jQuery.extend({ windowData : elem; - var id = elem[ jQuery.expando ], cache = jQuery.cache, thisCache, - isNode = elem.nodeType, - store; + var isNode = elem.nodeType, + id = isNode ? elem[ jQuery.expando ] : null, + cache = jQuery.cache, thisCache; - if ( !id && typeof name === "string" && data === undefined ) { + if ( isNode && !id && typeof name === "string" && data === undefined ) { return; } // Get the data from the object directly if ( !isNode ) { cache = elem; - id = jQuery.expando; // Compute a unique ID for the element } else if ( !id ) { @@ -56,26 +54,14 @@ jQuery.extend({ cache[ id ] = jQuery.extend(cache[ id ], name); } else { - store = jQuery.extend(cache[ id ], name); - cache[ id ] = function() { - return store; - }; + jQuery.extend( cache, name ); } - } else if ( !cache[ id ] ) { - if ( isNode ) { - cache[ id ] = {}; - - } else { - store = {}; - cache[ id ] = function() { - return store; - }; - } - + } else if ( isNode && !cache[ id ] ) { + cache[ id ] = {}; } - thisCache = isNode ? cache[ id ] : cache[ id ](); + thisCache = isNode ? cache[ id ] : cache; // Prevent overriding the named cache with undefined values if ( data !== undefined ) { @@ -95,11 +81,9 @@ jQuery.extend({ elem; var isNode = elem.nodeType, - id = elem[ jQuery.expando ], cache = jQuery.cache; - if ( id && !isNode ) { - id = id(); - } - var thisCache = cache[ id ]; + id = isNode ? elem[ jQuery.expando ] : elem, + cache = jQuery.cache, + thisCache = isNode ? cache[ id ] : id; // If we want to remove a specific section of the element's data if ( name ) { @@ -108,23 +92,28 @@ jQuery.extend({ delete thisCache[ name ]; // If we've removed all the data, remove the element's cache - if ( jQuery.isEmptyObject(thisCache) ) { + if ( isNode && jQuery.isEmptyObject(thisCache) ) { jQuery.removeData( elem ); } } // Otherwise, we want to remove all of the element's data } else { - if ( jQuery.support.deleteExpando || !isNode ) { + if ( isNode && jQuery.support.deleteExpando ) { delete elem[ jQuery.expando ]; } else if ( elem.removeAttribute ) { elem.removeAttribute( jQuery.expando ); - } // Completely remove the data cache - if ( isNode ) { + } else if ( isNode ) { delete cache[ id ]; + + // Remove all fields from the object + } else { + for ( var n in elem ) { + delete elem[ n ]; + } } } }, @@ -132,7 +121,7 @@ jQuery.extend({ // A method for determining if a DOM node can handle the data expando acceptData: function( elem ) { if ( elem.nodeName ) { - match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; if ( match ) { return !(match === true || elem.getAttribute("classid") !== match); @@ -174,7 +163,7 @@ jQuery.fn.extend({ data = data === "true" ? true : data === "false" ? false : data === "null" ? null : - rdigit.test( data ) && !isNaN( data ) ? parseFloat( data ) : + !jQuery.isNaN( data ) ? parseFloat( data ) : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {}