diff --git a/components/canvas/CanvasChatPanel.tsx b/components/canvas/CanvasChatPanel.tsx index 13cbc15..8e5ba3a 100644 --- a/components/canvas/CanvasChatPanel.tsx +++ b/components/canvas/CanvasChatPanel.tsx @@ -227,18 +227,21 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF ${shortName} `; - // 在光标位置插入,或添加到末尾 + // 在光标位置插入,或添加到末尾,并在标签后插入一个零宽空格,方便光标落在标签后继续输入 const selection = window.getSelection(); if (selection && selection.rangeCount > 0 && editableDiv.contains(selection.anchorNode)) { const range = selection.getRangeAt(0); range.deleteContents(); + const spaceNode = document.createTextNode("\u200b"); + range.insertNode(spaceNode); range.insertNode(tagSpan); - range.setStartAfter(tagSpan); - range.setEndAfter(tagSpan); + range.setStartAfter(spaceNode); + range.setEndAfter(spaceNode); selection.removeAllRanges(); selection.addRange(range); } else { editableDiv.appendChild(tagSpan); + editableDiv.appendChild(document.createTextNode("\u200b")); } console.log('[CanvasChat] 已插入图片标签:', url.substring(0, 50)); @@ -281,18 +284,21 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF ${objectPosition} `; - // 在光标位置插入,或添加到末尾 + // 在光标位置插入,或添加到末尾,并在标签后插入一个零宽空格,方便光标落在标签后继续输入 const selection = window.getSelection(); if (selection && selection.rangeCount > 0 && editableDiv.contains(selection.anchorNode)) { const range = selection.getRangeAt(0); range.deleteContents(); + const spaceNode = document.createTextNode("\u200b"); + range.insertNode(spaceNode); range.insertNode(tagSpan); - range.setStartAfter(tagSpan); - range.setEndAfter(tagSpan); + range.setStartAfter(spaceNode); + range.setEndAfter(spaceNode); selection.removeAllRanges(); selection.addRange(range); } else { editableDiv.appendChild(tagSpan); + editableDiv.appendChild(document.createTextNode("\u200b")); } console.log('[CanvasChat] 已插入物品标签:', objectName, objectPosition);