From 6789869cc7c16b774a312f80dfc79a55047181f2 Mon Sep 17 00:00:00 2001 From: defcc Date: Fri, 15 Sep 2017 13:27:32 +0800 Subject: [PATCH] fix: workaround the buggy behavior of textNode remove action in old version chrome. --- src/core/vdom/patch.js | 2 +- src/platforms/web/runtime/modules/dom-props.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/core/vdom/patch.js b/src/core/vdom/patch.js index 40a4a0ccb45..f5c1b4ef274 100644 --- a/src/core/vdom/patch.js +++ b/src/core/vdom/patch.js @@ -97,7 +97,7 @@ export function createPatchFunction (backend) { function removeNode (el) { const parent = nodeOps.parentNode(el) // element may have already been removed due to v-html / v-text - if (isDef(parent)) { + if (isDef(parent) && !parent._isContentReset) { nodeOps.removeChild(parent, el) } } diff --git a/src/platforms/web/runtime/modules/dom-props.js b/src/platforms/web/runtime/modules/dom-props.js index f2502ac98bb..8d861761b54 100644 --- a/src/platforms/web/runtime/modules/dom-props.js +++ b/src/platforms/web/runtime/modules/dom-props.js @@ -28,6 +28,16 @@ function updateDOMProps (oldVnode: VNodeWithData, vnode: VNodeWithData) { if (key === 'textContent' || key === 'innerHTML') { if (vnode.children) vnode.children.length = 0 if (cur === oldProps[key]) continue + + // in old version of chrome, textNode will always in the dom tree + // which causes the wrong behavior when patching + // see #6601 + if (oldVnode.children && + oldVnode.children.length === 1 && + isDef(oldVnode.children[0].text) + ) { + elm._isContentReset = true + } } if (key === 'value') {