使用 Javascript 在 textarea 中的光标处插入文本

IT技术 javascript cross-browser textarea cursor
2021-03-04 20:51:04

我已经在网上寻找解决方案,有一些,但它们似乎都将代码拆分为支持 IE 和 Firefox。我想知道是否有一种更优雅的方式可以在每个浏览器上工作,在文本区域的光标处插入一些文本。

非常感谢,

富有的

2个回答

不,没有。IE 有它的TextRange对象来完成这项工作。IE> = 9,一切过去很长一段时间了selectionStart,并selectionEnd在文字区域和文本输入性能。这个特殊的任务还不错:以下将删除当前选择(如果存在),在插入符号处插入文本并在插入文本后立即重新定位插入符号,在所有主要浏览器中:

function insertTextAtCursor(el, text) {
    var val = el.value, endIndex, range;
    if (typeof el.selectionStart != "undefined" && typeof el.selectionEnd != "undefined") {
        endIndex = el.selectionEnd;
        el.value = val.slice(0, el.selectionStart) + text + val.slice(endIndex);
        el.selectionStart = el.selectionEnd = endIndex + text.length;
    } else if (typeof document.selection != "undefined" && typeof document.selection.createRange != "undefined") {
        el.focus();
        range = document.selection.createRange();
        range.collapse(false);
        range.text = text;
        range.select();
    }
}
好消息是 IE 9 具有selectionStartselectionEnd.
2021-04-24 20:51:04
如果您使用箭头移动光标,它不会按预期工作
2021-04-24 20:51:04
这对我在所有三个浏览器中的实现都非常有用,我唯一的问题是替换选定的文本。如果我将 val.slice(0, endIndex) 替换为 val.slice(0, startIndex) 它提供了突出显示选择并将其替换为添加的文本的功能。仅适用于需要与我相同功能的其他人。
2021-05-04 20:51:04
非常感谢,认为浏览器可能在过去几年中有所发展,但显然 IE 仍然选择与众不同。
2021-05-11 20:51:04

同时实现:支持FF的代码和支持IE的代码。您可以使用框架为两种浏览器编写代码。比框架将完成拆分浏览器之间差异的工作。

很遗憾,但浏览器并非 100% 兼容!