diff options
author | John Resig <jeresig@gmail.com> | 2009-12-09 13:16:18 -0800 |
---|---|---|
committer | John Resig <jeresig@gmail.com> | 2009-12-09 13:16:18 -0800 |
commit | f6a0bf6816f4e2e67382b1b13fdd3ff2ea4b22f8 (patch) | |
tree | f3f8162c526aa7a8856425ae9f821cac8fe206f0 | |
parent | 4e27f17007c2329e31b449e61bb31197b90a37f1 (diff) | |
download | jquery-f6a0bf6816f4e2e67382b1b13fdd3ff2ea4b22f8.tar.gz jquery-f6a0bf6816f4e2e67382b1b13fdd3ff2ea4b22f8.zip |
Added support for .data(Object), overwriting the existing data object. Fixes #4284.
-rw-r--r-- | src/data.js | 16 | ||||
-rw-r--r-- | test/unit/data.js | 16 |
2 files changed, 27 insertions, 5 deletions
diff --git a/src/data.js b/src/data.js index 44aff0fd3..69adc1239 100644 --- a/src/data.js +++ b/src/data.js @@ -37,21 +37,24 @@ jQuery.extend({ // Avoid generating a new cache unless none exists and we // want to manipulate it. - if ( cache[ id ] ) { + 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 ] = {}; } - + // Prevent overriding the named cache with undefined values if ( data !== undefined ) { elem[ expando ] = id; thisCache[ name ] = data; } - - return name ? thisCache[ name ] : thisCache; + + return typeof name === "string" ? thisCache[ name ] : thisCache; }, removeData: function( elem, name ) { @@ -100,6 +103,11 @@ jQuery.fn.extend({ data: function( key, value ){ if ( typeof key === "undefined" && this.length ) { return jQuery.data( this[0] ); + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); } var parts = key.split("."); diff --git a/test/unit/data.js b/test/unit/data.js index 3916534c1..fd03c54fa 100644 --- a/test/unit/data.js +++ b/test/unit/data.js @@ -25,7 +25,7 @@ test("expando", function(){ }); test("jQuery.data", function() { - expect(6); + expect(8); var div = jQuery("#foo")[0]; equals( jQuery.data(div, "test"), undefined, "Check for no data exists" ); @@ -43,6 +43,10 @@ test("jQuery.data", function() { jQuery.data(div, "test", null); ok( jQuery.data(div, "test") === null, "Check for null data"); + + jQuery.data(div, { "test": "in", "test2": "in2" }); + equals( jQuery.data(div, "test"), "in", "Verify setting an object in data." ); + equals( jQuery.data(div, "test2"), "in2", "Verify setting an object in data." ); }); test(".data()", function() { @@ -114,6 +118,16 @@ test(".data(String) and .data(String, Object)", function() { $elem.removeData(); }); +test(".data(Object)", function() { + expect(2); + + var div = jQuery("<div/>"); + + div.data({ "test": "in", "test2": "in2" }); + equals( div.data("test"), "in", "Verify setting an object in data." ); + equals( div.data("test2"), "in2", "Verify setting an object in data." ); +}); + test("jQuery.removeData", function() { expect(1); var div = jQuery("#foo")[0]; |