Make deep .extend() an optional argument - it will go deep if you pass in an boolean as the first argument (fixed bug #1028).
This commit is contained in:
parent
8cf5d2df19
commit
e112e6b04d
3 changed files with 11 additions and 5 deletions
|
@ -434,7 +434,7 @@ jQuery.extend({
|
||||||
* @cat Ajax
|
* @cat Ajax
|
||||||
*/
|
*/
|
||||||
ajaxSetup: function( settings ) {
|
ajaxSetup: function( settings ) {
|
||||||
jQuery.extend( jQuery.ajaxSettings, settings );
|
jQuery.extend( true, jQuery.ajaxSettings, settings );
|
||||||
},
|
},
|
||||||
|
|
||||||
ajaxSettings: {
|
ajaxSettings: {
|
||||||
|
@ -575,7 +575,7 @@ jQuery.extend({
|
||||||
ajax: function( s ) {
|
ajax: function( s ) {
|
||||||
// Extend the settings, but re-extend 's' so that it can be
|
// Extend the settings, but re-extend 's' so that it can be
|
||||||
// checked again later (in the test suite, specifically)
|
// checked again later (in the test suite, specifically)
|
||||||
s = jQuery.extend(s, jQuery.extend({}, jQuery.ajaxSettings, s));
|
s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
|
||||||
|
|
||||||
// if data available
|
// if data available
|
||||||
if ( s.data ) {
|
if ( s.data ) {
|
||||||
|
|
2
src/jquery/coreTest.js
vendored
2
src/jquery/coreTest.js
vendored
|
@ -680,7 +680,7 @@ test("$.extend(Object, Object)", function() {
|
||||||
isObj( settings, merged, "Check if extended: settings must be extended" );
|
isObj( settings, merged, "Check if extended: settings must be extended" );
|
||||||
isObj( options, optionsCopy, "Check if not modified: options must not be modified" );
|
isObj( options, optionsCopy, "Check if not modified: options must not be modified" );
|
||||||
|
|
||||||
jQuery.extend(deep1, deep2);
|
jQuery.extend(true, deep1, deep2);
|
||||||
isObj( deep1.foo, deepmerged.foo, "Check if foo: settings must be extended" );
|
isObj( deep1.foo, deepmerged.foo, "Check if foo: settings must be extended" );
|
||||||
isObj( deep2.foo, deep2copy.foo, "Check if not deep2: options must not be modified" );
|
isObj( deep2.foo, deep2copy.foo, "Check if not deep2: options must not be modified" );
|
||||||
|
|
||||||
|
|
10
src/jquery/jquery.js
vendored
10
src/jquery/jquery.js
vendored
|
@ -1256,7 +1256,13 @@ jQuery.fn = jQuery.prototype = {
|
||||||
*/
|
*/
|
||||||
jQuery.extend = jQuery.fn.extend = function() {
|
jQuery.extend = jQuery.fn.extend = function() {
|
||||||
// copy reference to target object
|
// copy reference to target object
|
||||||
var target = arguments[0] || {}, a = 1, al = arguments.length;
|
var target = arguments[0] || {}, a = 1, al = arguments.length, deep = false;
|
||||||
|
|
||||||
|
// Handle a deep copy situation
|
||||||
|
if ( target.constructor == Boolean ) {
|
||||||
|
deep = true;
|
||||||
|
target = arguments[1] || {};
|
||||||
|
}
|
||||||
|
|
||||||
// extend jQuery itself if only one argument is passed
|
// extend jQuery itself if only one argument is passed
|
||||||
if ( al == 1 ) {
|
if ( al == 1 ) {
|
||||||
|
@ -1276,7 +1282,7 @@ jQuery.extend = jQuery.fn.extend = function() {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Recurse if we're merging object values
|
// Recurse if we're merging object values
|
||||||
if ( typeof prop[i] == 'object' && target[i] )
|
if ( deep && typeof prop[i] == 'object' && target[i] )
|
||||||
jQuery.extend( target[i], prop[i] );
|
jQuery.extend( target[i], prop[i] );
|
||||||
|
|
||||||
// Don't bring in undefined values
|
// Don't bring in undefined values
|
||||||
|
|
Loading…
Add table
Reference in a new issue