From a981c80d2aedb0d56f98865e39c981819fbf65d0 Mon Sep 17 00:00:00 2001 From: GU Yiling Date: Fri, 21 Dec 2018 06:07:34 +0800 Subject: [PATCH] feat: support v-html for SVG elements (#8652) --- src/platforms/web/runtime/modules/dom-props.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/platforms/web/runtime/modules/dom-props.js b/src/platforms/web/runtime/modules/dom-props.js index da8143bf..28ee59ee 100644 --- a/src/platforms/web/runtime/modules/dom-props.js +++ b/src/platforms/web/runtime/modules/dom-props.js @@ -1,6 +1,9 @@ /* @flow */ import { isDef, isUndef, extend, toNumber } from 'shared/util' +import { isSVG } from 'web/util/index' + +let svgContainer function updateDOMProps (oldVnode: VNodeWithData, vnode: VNodeWithData) { if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) { @@ -55,6 +58,17 @@ function updateDOMProps (oldVnode: VNodeWithData, vnode: VNodeWithData) { if (shouldUpdateValue(elm, strCur)) { elm.value = strCur } + } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) { + // IE doesn't support innerHTML for SVG elements + svgContainer = svgContainer || document.createElement('div') + svgContainer.innerHTML = `${cur}` + const svg = svgContainer.firstChild + while (elm.firstChild) { + elm.removeChild(elm.firstChild) + } + while (svg.firstChild) { + elm.appendChild(svg.firstChild) + } } else { elm[key] = cur }