将文本插入光标所在的文本区域

Insert Text Into Textarea Where Cursor Is

本文关键字:文本 区域 光标 插入      更新时间:2023-09-26

我有下面的JS,它在当前文本区域中的任何内容的末尾将一些内容插入到文本区域中。这一切都适用于以下代码:

<script>
if (opener.document.post.sMessage.createTextRange && opener.document.post.sMessage.caretPos) {
  var caretPos = opener.document.post.sMessage.caretPos;
  caretPos.text = ''n'n![](http://example.com/image.png)';
} else {
opener.document.post.sMessage.value += ''n'n![](http://example.com/image.png)';
}
self.close(); //close popup
</script>

如何修改以将内容插入光标所在的文本区域(而不是仅位于现有文本的末尾)?

没有足够的声誉发表评论,但@GMKHussain的回答中有一个拼写错误,我相信。

我认为在+ elem.value.substring(endPos, elem.value.length);endPos行中,应将其替换为_endSelection+ elem.value.substring(_endSelection, elem.value.length);

使用VanillaJS 的解决方案

function addContentAtCursorFunc( elem, newContent ) {
    
    if (elem.selectionStart || elem.selectionStart == '0') {
        let _startSelection = elem.selectionStart;
        let _endSelection = elem.selectionEnd;
            elem.value = elem.value.substring(0, _startSelection)
            + newContent
            + elem.value.substring(endPos, elem.value.length);
    } else {
        elem.value += newContent;
    }
}

const button = document.getElementById('myBtn');
const textarea = document.getElementById('myTextarea');

button.addEventListener('click', event => {
  addContentAtCursorFunc( textarea , "  *| I'M NEW CONTENT! |*  ")
  return false
});
<textarea id="myTextarea" cols="40" rows="3">Select some of this text and then hit the button.</textarea>
<button id="myBtn">Type some stuff</button>