我有一个 contenteditable div,我需要在插入符号位置插入文本,
这可以在 IE 中通过 document.selection.createRange().text = "banana"
轻松完成
在 Firefox/Chrome 中是否有类似的实现方式?
(我知道 这里 有一个解决方案,但它不能用于 contenteditable div,而且看起来很笨拙)
谢谢!
原文由 user314362 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个 contenteditable div,我需要在插入符号位置插入文本,
这可以在 IE 中通过 document.selection.createRange().text = "banana"
轻松完成
在 Firefox/Chrome 中是否有类似的实现方式?
(我知道 这里 有一个解决方案,但它不能用于 contenteditable div,而且看起来很笨拙)
谢谢!
原文由 user314362 发布,翻译遵循 CC BY-SA 4.0 许可协议
window.getSelection()
获取选择对象。Selection.getRangeAt(0).insertNode()
添加文本节点。Selection.modify()
将光标位置移到添加的文本后面。 (未标准化,但 Firefox、Chrome 和 Safari 支持此功能) function insertTextAtCursor(text)
{
let selection = window.getSelection();
let range = selection.getRangeAt(0);
range.deleteContents();
let node = document.createTextNode(text);
range.insertNode(node);
for(let position = 0; position != text.length; position++)
{
selection.modify("move", "right", "character");
};
}
原文由 Martin Wantke 发布,翻译遵循 CC BY-SA 3.0 许可协议
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.4k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.2k 阅读
以下函数将在插入符号位置插入文本并删除现有选择。它适用于所有主流桌面浏览器:
更新
根据评论,这里有一些用于保存和恢复选择的代码。在显示上下文菜单之前,您应该将
saveSelection
的返回值存储在一个变量中,然后将该变量传递给restoreSelection
以在隐藏上下文菜单之后和插入文本之前恢复选择。