diff --git a/src/core/vdom/create-element.js b/src/core/vdom/create-element.js index 248bcff18f9..c5cde2c6424 100644 --- a/src/core/vdom/create-element.js +++ b/src/core/vdom/create-element.js @@ -139,7 +139,8 @@ function applyNS (vnode, ns, force) { if (isDef(vnode.children)) { for (let i = 0, l = vnode.children.length; i < l; i++) { const child = vnode.children[i] - if (isDef(child.tag) && (isUndef(child.ns) || isTrue(force))) { + if (isDef(child.tag) && ( + isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) { applyNS(child, ns, force) } } diff --git a/test/unit/modules/vdom/create-element.spec.js b/test/unit/modules/vdom/create-element.spec.js index f2fddcf6d14..16a5e4a8a7c 100644 --- a/test/unit/modules/vdom/create-element.spec.js +++ b/test/unit/modules/vdom/create-element.spec.js @@ -135,10 +135,12 @@ describe('create-element', () => { it('render svg foreignObject with correct namespace', () => { const vm = new Vue({}) const h = vm.$createElement - const vnode = h('svg', [h('foreignObject', [h('p')])]) + const vnode = h('svg', [h('foreignObject', [h('p'), h('svg')])]) expect(vnode.ns).toBe('svg') expect(vnode.children[0].ns).toBe('svg') expect(vnode.children[0].children[0].ns).toBeUndefined() + // #7330 + expect(vnode.children[0].children[1].ns).toBe('svg') }) // #6642