diff options
-rw-r--r-- | src/data.js | 38 | ||||
-rw-r--r-- | test/unit/data.js | 27 |
2 files changed, 45 insertions, 20 deletions
diff --git a/src/data.js b/src/data.js index c18e73cfd..085db0bb3 100644 --- a/src/data.js +++ b/src/data.js @@ -13,26 +13,33 @@ jQuery.extend({ var id = elem[ expando ], cache = jQuery.cache, thisCache;
- // Compute a unique ID for the element
- if(!id) id = elem[ expando ] = ++uuid;
-
// Handle the case where there's no name immediately
- if ( !name ) { return id; }
+ if ( !name ) {
+ return id;
+ }
+
+ // Compute a unique ID for the element
+ if ( !id ) {
+ id = ++uuid;
+ }
// Avoid generating a new cache unless none exists and we
// want to manipulate it.
- if( cache[ id ] )
+ if ( cache[ id ] ) {
thisCache = cache[ id ];
- else if( typeof data === "undefined" )
+ } else if ( typeof data === "undefined" ) {
thisCache = emptyObject;
- else
+ } else {
thisCache = cache[ id ] = {};
+ }
// Prevent overriding the named cache with undefined values
- if ( data !== undefined ) thisCache[ name ] = data;
-
- if(name === true) return thisCache;
- else return thisCache[name];
+ if ( data !== undefined ) {
+ elem[ expando ] = id;
+ thisCache[ name ] = data;
+ }
+
+ return name === true ? thisCache : thisCache[ name ];
},
removeData: function( elem, name ) {
@@ -49,8 +56,9 @@ jQuery.extend({ delete thisCache[ name ];
// If we've removed all the data, remove the element's cache
- if( jQuery.isEmptyObject(thisCache) )
+ if ( jQuery.isEmptyObject(thisCache) ) {
jQuery.removeData( elem );
+ }
}
// Otherwise, we want to remove all of the element's data
@@ -58,17 +66,19 @@ jQuery.extend({ // Clean up the element expando
try {
delete elem[ expando ];
- } catch(e){
+ } catch( e ) {
// IE has trouble directly removing the expando
// but it's ok with using removeAttribute
- if ( elem.removeAttribute )
+ if ( elem.removeAttribute ) {
elem.removeAttribute( expando );
+ }
}
// Completely remove the data cache
delete cache[ id ];
}
},
+
queue: function( elem, type, data ) {
if( !elem ) return;
diff --git a/test/unit/data.js b/test/unit/data.js index 46e46ed5a..6a367f78c 100644 --- a/test/unit/data.js +++ b/test/unit/data.js @@ -1,31 +1,46 @@ module("data");
test("expando", function(){
- expect(4);
+ expect(7);
equals("expando" in jQuery, true, "jQuery is exposing the expando");
var obj = {};
+ jQuery.data(obj);
+ equals( jQuery.expando in obj, false, "jQuery.data did not add an expando to the object" );
+
+ jQuery.data(obj, true);
+ equals( jQuery.expando in obj, false, "jQuery.data did not add an expando to the object" );
+
+ jQuery.data(obj, 'test');
+ equals( jQuery.expando in obj, false, "jQuery.data did not add an expando to the object" );
+
jQuery.data(obj, "foo", "bar");
-
- equals(jQuery.expando in obj, true, "jQuery.data added an expando to the object");
+ equals( jQuery.expando in obj, true, "jQuery.data added an expando to the object" );
var id = obj[jQuery.expando];
- equals( id in jQuery.cache, true, "jQuery.data added an entry to jQuery.cache");
+ equals( id in jQuery.cache, true, "jQuery.data added an entry to jQuery.cache" );
- equals( jQuery.cache[id].foo, "bar", "jQuery.data worked correctly");
+ equals( jQuery.cache[id].foo, "bar", "jQuery.data worked correctly" );
});
test("jQuery.data", function() {
- expect(5);
+ expect(6);
var div = jQuery("#foo")[0];
equals( jQuery.data(div, "test"), undefined, "Check for no data exists" );
+
jQuery.data(div, "test", "success");
equals( jQuery.data(div, "test"), "success", "Check for added data" );
+
+ var data = jQuery.data(div, true);
+ same( data, { "test": "success" }, "Return complete data set" );
+
jQuery.data(div, "test", "overwritten");
equals( jQuery.data(div, "test"), "overwritten", "Check for overwritten data" );
+
jQuery.data(div, "test", undefined);
equals( jQuery.data(div, "test"), "overwritten", "Check that data wasn't removed");
+
jQuery.data(div, "test", null);
ok( jQuery.data(div, "test") === null, "Check for null data");
});
|