From 1ab6cbfeb21220428c2e616dc12609435bb1b307 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Mon, 23 Dec 2024 11:34:33 +0800 Subject: [PATCH] fix: copy svg (#491) close #490 --- .../CodemirrorEditor/EditorHeader/index.vue | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/components/CodemirrorEditor/EditorHeader/index.vue b/src/components/CodemirrorEditor/EditorHeader/index.vue index c64249d..6d8fdf4 100644 --- a/src/components/CodemirrorEditor/EditorHeader/index.vue +++ b/src/components/CodemirrorEditor/EditorHeader/index.vue @@ -64,6 +64,15 @@ const copyMode = useStorage(addPrefix(`copyMode`), `txt`) const source = ref(``) const { copy: copyContent } = useClipboard({ source }) +const creatEmptyNode = () => { + const node = document.createElement(`p`) + node.style.fontSize = `0` + node.style.lineHeight = `0` + node.style.margin = `0` + node.innerHTML = ` ` + return node +} + // 复制到微信公众号 function copy() { emit(`startCopy`) @@ -107,13 +116,11 @@ function copy() { clipboardDiv.focus() - // edge case: 由于 svg 无法复制, 在前面插入一个空节点 - const p = document.createElement(`p`) - p.style.fontSize = `0` // 设置字体大小为 0 - p.style.lineHeight = `0` // 行高也为 0 - p.style.margin = `0` // 避免外边距干扰 - p.innerHTML = ` ` - clipboardDiv.insertBefore(p, clipboardDiv.firstChild) + // 由于 svg 无法复制, 在前后各插入一个空白节点 + const beforeNode = creatEmptyNode() + const afterNode = creatEmptyNode() + clipboardDiv.insertBefore(beforeNode, clipboardDiv.firstChild) + clipboardDiv.appendChild(afterNode) // 兼容 Mermaid const nodes = clipboardDiv.querySelectorAll(`.nodeLabel`)