From 41aebc45058283ff35eafb31db72555f41c08623 Mon Sep 17 00:00:00 2001 From: luckylooke Date: Tue, 7 Jul 2015 12:04:41 +0200 Subject: [PATCH] fix(merge): clone elements instead of threating them like objects Similar fix to #11720 --- src/Angular.js | 2 ++ test/AngularSpec.js | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/Angular.js b/src/Angular.js index e66b9938a9a3..2f4aa08acd63 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -354,6 +354,8 @@ function baseExtend(dst, objs, deep) { if (deep && isObject(src)) { if (isDate(src)) { dst[key] = new Date(src.valueOf()); + } else if (isElement(src)) { + dst[key] = src[0] ? jqLite(src).clone()[0] : jqLite(src).clone(); } else { if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {}; baseExtend(dst[key], [src], true); diff --git a/test/AngularSpec.js b/test/AngularSpec.js index fe7135955b49..03eaffadc93e 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -491,6 +491,17 @@ describe('angular', function() { expect(dst.date).toBe(src.date); }); + + it('should copy elements by reference', function() { + var src = { element: document.createElement('div'), + jqObject: jqLite("

s1s2

").find("span") }; + var dst = {}; + + extend(dst, src); + + expect(dst.element).toBe(src.element); + expect(dst.jqObject).toBe(src.jqObject); + }); }); @@ -570,6 +581,21 @@ describe('angular', function() { expect(isDate(dst.date)).toBeTruthy(); expect(dst.date.valueOf()).toEqual(src.date.valueOf()); }); + + + it('should copy(clone) elements', function() { + var src = { element: document.createElement('div'), + jqObject: jqLite("

s1s2

").find("span") }; + var dst = {}; + + merge(dst, src); + + expect(dst.element).not.toBe(src.element); + expect(dst.jqObject).not.toBe(src.jqObject); + + expect(isElement(dst.element)).toBeTruthy(); + expect(isElement(dst.jqObject)).toBeTruthy(); + }); });