Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 838cf4b

Browse files
luckylookepetebacondarwin
authored andcommitted
fix(merge): clone elements instead of treating them like simple objects
Similar fix to #11720 Closes #12286
1 parent de2a56b commit 838cf4b

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/Angular.js

+2
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,8 @@ function baseExtend(dst, objs, deep) {
360360
dst[key] = new Date(src.valueOf());
361361
} else if (isRegExp(src)) {
362362
dst[key] = new RegExp(src);
363+
} else if (isElement(src)) {
364+
dst[key] = src[0] ? jqLite(src).clone()[0] : jqLite(src).clone();
363365
} else {
364366
if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};
365367
baseExtend(dst[key], [src], true);

test/AngularSpec.js

+26
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,17 @@ describe('angular', function() {
522522

523523
expect(dst.date).toBe(src.date);
524524
});
525+
526+
it('should copy elements by reference', function() {
527+
var src = { element: document.createElement('div'),
528+
jqObject: jqLite("<p><span>s1</span><span>s2</span></p>").find("span") };
529+
var dst = {};
530+
531+
extend(dst, src);
532+
533+
expect(dst.element).toBe(src.element);
534+
expect(dst.jqObject).toBe(src.jqObject);
535+
});
525536
});
526537

527538

@@ -612,6 +623,21 @@ describe('angular', function() {
612623
expect(isRegExp(dst.regexp)).toBe(true);
613624
expect(dst.regexp.toString()).toBe(src.regexp.toString());
614625
});
626+
627+
628+
it('should copy(clone) elements', function() {
629+
var src = { element: document.createElement('div'),
630+
jqObject: jqLite("<p><span>s1</span><span>s2</span></p>").find("span") };
631+
var dst = {};
632+
633+
merge(dst, src);
634+
635+
expect(dst.element).not.toBe(src.element);
636+
expect(dst.jqObject).not.toBe(src.jqObject);
637+
638+
expect(isElement(dst.element)).toBeTruthy();
639+
expect(isElement(dst.jqObject)).toBeTruthy();
640+
});
615641
});
616642

617643

0 commit comments

Comments
 (0)