aboutsummaryrefslogtreecommitdiffstats
path: root/src/core.js
diff options
context:
space:
mode:
authorRichard Gibson <richard.gibson@gmail.com>2011-12-06 15:25:38 -0500
committerDave Methvin <dave.methvin@gmail.com>2011-12-06 15:25:38 -0500
commit6c2a501de40a5f6b3ad382e2d309e5a10fce04d0 (patch)
treec72333c9a1d5d29acd4e3224ddf6d4e4e00db5fe /src/core.js
parentd511613d748a92af04a3f07943f34f9baadc4153 (diff)
downloadjquery-6c2a501de40a5f6b3ad382e2d309e5a10fce04d0.tar.gz
jquery-6c2a501de40a5f6b3ad382e2d309e5a10fce04d0.zip
Fix #5571. Setters should treat `undefined` as a no-op and be chainable.
Diffstat (limited to 'src/core.js')
-rw-r--r--src/core.js56
1 files changed, 40 insertions, 16 deletions
diff --git a/src/core.js b/src/core.js
index 2fa9d8b88..1a029814f 100644
--- a/src/core.js
+++ b/src/core.js
@@ -801,31 +801,55 @@ jQuery.extend({
// Mutifunctional method to get and set values to a collection
// The value/s can optionally be executed if it's a function
- access: function( elems, key, value, exec, fn, pass ) {
- var length = elems.length;
+ access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
+ var exec,
+ bulk = key == null,
+ i = 0,
+ length = elems.length;
- // Setting many attributes
- if ( typeof key === "object" ) {
- for ( var k in key ) {
- jQuery.access( elems, k, key[k], exec, fn, value );
+ // Sets many values
+ if ( key && typeof key === "object" ) {
+ for ( i in key ) {
+ jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
}
- return elems;
- }
+ chainable = 1;
- // Setting one attribute
- if ( value !== undefined ) {
+ // Sets one value
+ } else if ( value !== undefined ) {
// Optionally, function values get executed if exec is true
- exec = !pass && exec && jQuery.isFunction(value);
+ exec = pass === undefined && jQuery.isFunction( value );
+
+ if ( bulk ) {
+ // Bulk operations only iterate when executing function values
+ if ( exec ) {
+ exec = fn;
+ fn = function( elem, key, value ) {
+ return exec.call( jQuery( elem ), value );
+ };
- for ( var i = 0; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ // Otherwise they run against the entire set
+ } else {
+ fn.call( elems, value );
+ fn = null;
+ }
}
- return elems;
+ if ( fn ) {
+ for (; i < length; i++ ) {
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ }
+ }
+
+ chainable = 1;
}
- // Getting an attribute
- return length ? fn( elems[0], key ) : undefined;
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call( elems ) :
+ length ? fn( elems[0], key ) : emptyGet;
},
now: function() {