【发布时间】:2017-09-17 22:34:20
【问题描述】:
我有一个拼写检查解决方案,它使用内容可编辑的div 并在拼写错误的单词周围插入span 标记。每次更新div的内部html时,光标都会移动到div的开头。
我知道如果用户在句子末尾添加新单词,我可以将光标移动到 div 的末尾(代码如下)。
旧文本:这是一个拼写检查器|
新文本:这是一个拼写检查解决方案|
var range = document.createRange();
range.selectNodeContents(element[0]);
range.collapse(false);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
但是,如果用户在句子中间添加单词,我无法保留光标位置。
旧文本:这是一个拼写检查器
新文本:这是一个新的拼写检查器|
在上述情况下,光标移动到div 的末尾,而它应该在“new”之后。
如何保留光标位置?由于我正在更新 html 并添加节点,因此在更新之前保存范围并将其添加到选择对象中不起作用。
提前致谢。
【问题讨论】:
-
请检查this topic 是否回答了您的问题。谢谢。
-
谢谢,@Pyromonk - 不幸的是,这种方法对我不起作用,因为我需要更新 div 的 innerHtml,因此,任何标记节点都会丢失。
-
真可惜。我会努力寻找可能有帮助的东西。我想在更新 div 的 innerHTML 时使用单独的元素仅用于输入是不可能的?
-
不幸的是,是的。我尝试更新内部 html,同时仍保留标记节点,然后选择它,但我不断收到“给定范围不在文档中”错误。
-
@HAL9256 您可以分享任何代码 sn-p 或小提琴链接以获得更多说明吗?谢谢
标签: javascript html dom contenteditable cursor-position