小编典典

在内容可编辑div中的光标处插入文本

javascript

我有一个contenteditable div,需要在插入符号的位置插入文本,

可以通过IE在IE中轻松完成此操作 document.selection.createRange().text = "banana"

在Firefox / Chrome中有类似的实现方式吗?

谢谢!


阅读 548

收藏
2020-05-01

共1个答案

小编典典

以下功能将在插入符号位置插入文本,并删除现有选择。它适用于所有主流桌面浏览器:

function insertTextAtCursor(text) {
    var sel, range;
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            range = sel.getRangeAt(0);
            range.deleteContents();
            range.insertNode( document.createTextNode(text) );
        }
    } else if (document.selection && document.selection.createRange) {
        document.selection.createRange().text = text;
    }
}

更新

基于注释,下面是一些用于保存和还原选择的代码。在显示上下文菜单之前,应该将返回值存储saveSelection在一个变量中,然后restoreSelection在隐藏上下文菜单之后并插入文本之前,将该变​​量传递给它以恢复选择。

function saveSelection() {
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            return sel.getRangeAt(0);
        }
    } else if (document.selection && document.selection.createRange) {
        return document.selection.createRange();
    }
    return null;
}

function restoreSelection(range) {
    if (range) {
        if (window.getSelection) {
            sel = window.getSelection();
            sel.removeAllRanges();
            sel.addRange(range);
        } else if (document.selection && range.select) {
            range.select();
        }
    }
}
2020-05-01