6

我在网上浏览了一些解决方案,有一些,但它们似乎都将代码拆分为支持 IE 和 Firefox。

我想知道是否有一种更优雅的方式可以在每个浏览器上使用,在textarea.

非常感谢。

4

2 回答 2

21

不,没有。IE 有它的TextRange对象来完成这项工作。IE >= 9 以及过去很长一段时间内的所有其他内容都具有textareasselectionStartselectionEnd文本输入的属性。这个特定的任务还不错:以下将删除当前选择(如果存在),在插入符号处插入文本并在插入文本之后立即重新定位插入符,在所有主要浏览器中:

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();
    }
}
于 2010-07-22T11:57:54.803 回答
0

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

很遗憾,但浏览器不是 100% 兼容的!

于 2010-07-22T11:29:17.010 回答