diff --git a/simple-mind-map/src/core/render/TextEdit.js b/simple-mind-map/src/core/render/TextEdit.js index 620ba85a..6d96b1ea 100644 --- a/simple-mind-map/src/core/render/TextEdit.js +++ b/simple-mind-map/src/core/render/TextEdit.js @@ -3,7 +3,10 @@ import { checkNodeOuter, focusInput, selectAllInput, - htmlEscape + htmlEscape, + handleInputPasteText, + checkSmmFormatData, + getTextFromHtml } from '../../utils' import { ERROR_TYPES, CONSTANTS } from '../../constants/constant' @@ -226,6 +229,16 @@ export default class TextEdit { e.stopPropagation() } }) + this.textEditNode.addEventListener('paste', e => { + const text = e.clipboardData.getData('text') + const { isSmm, data } = checkSmmFormatData(text) + if (isSmm && data[0] && data[0].data) { + // 只取第一个节点的纯文本 + handleInputPasteText(e, getTextFromHtml(data[0].data.text)) + } else { + handleInputPasteText(e) + } + }) const targetNode = this.mindMap.opt.customInnerElsAppendTo || document.body targetNode.appendChild(this.textEditNode) diff --git a/simple-mind-map/src/utils/index.js b/simple-mind-map/src/utils/index.js index 6417e79d..6fdf0230 100644 --- a/simple-mind-map/src/utils/index.js +++ b/simple-mind-map/src/utils/index.js @@ -1058,3 +1058,19 @@ export const checkSmmFormatData = data => { data: isSmm ? smmData : String(data) } } + +// 处理输入框的粘贴事件,会去除文本的html格式、换行 +export const handleInputPasteText = (e, text) => { + e.preventDefault() + const selection = window.getSelection() + if (!selection.rangeCount) return + selection.deleteFromDocument() + text = text || e.clipboardData.getData('text') + // 去除格式 + text = getTextFromHtml(text) + // 去除换行 + text = text.replaceAll(/\n/g, '') + const node = document.createTextNode(text) + selection.getRangeAt(0).insertNode(node) + selection.collapseToEnd() +}