Skip to content

Commit 41aebc4

Browse files
committed
fix(merge): clone elements instead of threating them like objects
Similar fix to angular#11720
1 parent d518a64 commit 41aebc4

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
@@ -354,6 +354,8 @@ function baseExtend(dst, objs, deep) {
354354
if (deep && isObject(src)) {
355355
if (isDate(src)) {
356356
dst[key] = new Date(src.valueOf());
357+
} else if (isElement(src)) {
358+
dst[key] = src[0] ? jqLite(src).clone()[0] : jqLite(src).clone();
357359
} else {
358360
if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};
359361
baseExtend(dst[key], [src], true);

test/AngularSpec.js

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

492492
expect(dst.date).toBe(src.date);
493493
});
494+
495+
it('should copy elements by reference', function() {
496+
var src = { element: document.createElement('div'),
497+
jqObject: jqLite("<p><span>s1</span><span>s2</span></p>").find("span") };
498+
var dst = {};
499+
500+
extend(dst, src);
501+
502+
expect(dst.element).toBe(src.element);
503+
expect(dst.jqObject).toBe(src.jqObject);
504+
});
494505
});
495506

496507

@@ -570,6 +581,21 @@ describe('angular', function() {
570581
expect(isDate(dst.date)).toBeTruthy();
571582
expect(dst.date.valueOf()).toEqual(src.date.valueOf());
572583
});
584+
585+
586+
it('should copy(clone) elements', function() {
587+
var src = { element: document.createElement('div'),
588+
jqObject: jqLite("<p><span>s1</span><span>s2</span></p>").find("span") };
589+
var dst = {};
590+
591+
merge(dst, src);
592+
593+
expect(dst.element).not.toBe(src.element);
594+
expect(dst.jqObject).not.toBe(src.jqObject);
595+
596+
expect(isElement(dst.element)).toBeTruthy();
597+
expect(isElement(dst.jqObject)).toBeTruthy();
598+
});
573599
});
574600

575601

0 commit comments

Comments
 (0)