我有一个contenteditable div,需要在插入符号的位置插入文本,
可以通过IE在IE中轻松完成此操作 document.selection.createRange().text = "banana"
document.selection.createRange().text = "banana"
在Firefox / Chrome中有类似的实现方式吗?
谢谢!
以下功能将在插入符号位置插入文本,并删除现有选择。它适用于所有主流桌面浏览器:
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在隐藏上下文菜单之后并插入文本之前,将该变量传递给它以恢复选择。
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(); } } }