From f6a0bf6816f4e2e67382b1b13fdd3ff2ea4b22f8 Mon Sep 17 00:00:00 2001 From: John Resig Date: Wed, 9 Dec 2009 13:16:18 -0800 Subject: [PATCH] Added support for .data(Object), overwriting the existing data object. Fixes #4284. --- src/data.js | 16 ++++++++++++---- 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.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]; -- 2.39.5