Skip to content

Commit 0ee9415

Browse files
committed
Restore jQuery.access parameter mistakenly removed in 80d45a6
1 parent 81b094b commit 0ee9415

File tree

3 files changed

+56
-40
lines changed

3 files changed

+56
-40
lines changed

src/core.js

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -782,41 +782,44 @@ jQuery.extend({
782782

783783
// Multifunctional method to get and set values of a collection
784784
// The value/s can optionally be executed if it's a function
785-
access: function( elems, fn, key, value, chainable, emptyGet ) {
785+
access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
786786
var i = 0,
787787
length = elems.length,
788-
bulk = key == null,
789-
exec = value !== undefined && jQuery.isFunction( value );
788+
bulk = key == null;
790789

791790
// Sets many values
792791
if ( key && typeof key === "object" ) {
793792
chainable = true;
794793
for ( i in key ) {
795-
jQuery.access( elems, fn, i, key[i], true, emptyGet );
794+
jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
796795
}
797796

798797
// Sets one value
799798
} else if ( value !== undefined ) {
800799
chainable = true;
801800

802-
if ( bulk ) {
803-
// Bulk operations only iterate when executing function values
804-
if ( exec ) {
805-
exec = fn;
806-
fn = function( elem, key, value ) {
807-
return exec.call( jQuery( elem ), value );
808-
};
801+
if ( !jQuery.isFunction( value ) ) {
802+
raw = true;
803+
}
809804

810-
// Otherwise they run against the entire set
811-
} else {
805+
if ( bulk ) {
806+
// Bulk operations run against the entire set
807+
if ( raw ) {
812808
fn.call( elems, value );
813809
fn = null;
810+
811+
// ...except when executing function values
812+
} else {
813+
bulk = fn;
814+
fn = function( elem, key, value ) {
815+
return bulk.call( jQuery( elem ), value );
816+
};
814817
}
815818
}
816819

817820
if ( fn ) {
818821
for ( ; i < length; i++ ) {
819-
fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value );
822+
fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
820823
}
821824
}
822825
}

src/data.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ jQuery.fn.extend({
277277
this.each(function() {
278278
jQuery.data( this, key, value );
279279
});
280-
}, null, value, arguments.length > 1, null, false );
280+
}, null, value, arguments.length > 1, null, true );
281281
},
282282

283283
removeData: function( key ) {

test/unit/data.js

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -174,40 +174,53 @@ test(".data()", function() {
174174
deepEqual( dataObj, { "foo": "baz" }, "Retrieve data object from a wrapped JS object (#7524)" );
175175
});
176176

177-
test(".data(String) and .data(String, Object)", function() {
178-
expect( 12 );
177+
var testDataTypes = function( $obj ) {
178+
jQuery.each({
179+
"null": null,
180+
"true": true,
181+
"false": false,
182+
"zero": 0,
183+
"one": 1,
184+
"empty string": "",
185+
"empty array": [],
186+
"array": [1],
187+
"empty object": {},
188+
"object": { foo: "bar" },
189+
"date": new Date(),
190+
"regex": /test/,
191+
"function": function() {}
192+
}, function( type, value ) {
193+
strictEqual( $obj.data( "test", value ).data("test"), value, "Data set to " + type );
194+
});
195+
};
196+
197+
test("jQuery(Element).data(String, Object).data(String)", function() {
198+
expect( 18 );
179199
var parent = jQuery("<div><div></div></div>"),
180200
div = parent.children();
181201

182-
ok( div.data("test") === undefined, "Check for no data exists" );
183-
184-
div.data("test", "success");
185-
equal( div.data("test"), "success", "Check for added data" );
186-
187-
div.data("test", "overwritten");
188-
equal( div.data("test"), "overwritten", "Check for overwritten data" );
189-
190-
equal( div.data("test", undefined).data("test"), "overwritten", "Check that .data('key',undefined) does nothing but is chainable (#5571)");
202+
strictEqual( div.data("test"), undefined, "No data exists initially" );
203+
strictEqual( div.data("test", "success").data("test"), "success", "Data added" );
204+
strictEqual( div.data("test", "overwritten").data("test"), "overwritten", "Data overwritten" );
205+
strictEqual( div.data("test", undefined).data("test"), "overwritten", ".data(key,undefined) does nothing but is chainable (#5571)");
206+
strictEqual( div.data("notexist"), undefined, "No data exists for unset key" );
207+
testDataTypes( div );
191208

192-
div.data("test", null);
193-
ok( div.data("test") === null, "Check for null data");
209+
parent.remove();
210+
});
194211

195-
ok( div.data("notexist") === undefined, "Check for no data exists" );
212+
test("jQuery(plain Object).data(String, Object).data(String)", function() {
213+
expect( 16 );
196214

197215
// #3748
198-
var $elem = jQuery({exists:true});
199-
equal( $elem.data("nothing"), undefined, "Non-existent data returns undefined");
200-
equal( $elem.data("null", null).data("null"), null, "null's are preserved");
201-
equal( $elem.data("emptyString", "").data("emptyString"), "", "Empty strings are preserved");
202-
equal( $elem.data("false", false).data("false"), false, "false's are preserved");
203-
equal( $elem.data("exists"), undefined, "Existing data is not returned" );
216+
var $obj = jQuery({ exists: true });
217+
strictEqual( $obj.data("nothing"), undefined, "Non-existent data returns undefined");
218+
strictEqual( $obj.data("exists"), undefined, "Object properties are not returned as data" );
219+
testDataTypes( $obj );
204220

205221
// Clean up
206-
$elem.removeData();
207-
deepEqual( $elem[0], {exists:true}, "removeData does not clear the object" );
208-
209-
// manually clean up detached elements
210-
parent.remove();
222+
$obj.removeData();
223+
deepEqual( $obj[0], { exists: true }, "removeData does not clear the object" );
211224
});
212225

213226
test("data-* attributes", function() {

0 commit comments

Comments
 (0)