Javascript 在contenteditable div中更改innerHTML时保留光标位置

Javascript 在contenteditable div中更改innerHTML时保留光标位置,javascript,html,dom,Javascript,Html,Dom,我正在构建一个编辑器,可以在代码上突出显示语法。我目前的方法是只在编辑器中获取文本(contenteditable设置为true的div)并检查字符串中的正则表达式匹配。然后,我用元素替换匹配项,并对这些span元素应用一些样式。然后使用.innerHTML属性将分隔符中的完整文本替换为新文本。这很好,但我必须向后键入,因为在插入文本时,我的光标会重置为零。我尝试在插入之前记录selectionStart的值,然后执行 element.selectionStart=oldSelectionSta

我正在构建一个编辑器,可以在代码上突出显示语法。我目前的方法是只在编辑器中获取文本(contenteditable设置为true的div)并检查字符串中的正则表达式匹配。然后,我用
元素替换匹配项,并对这些span元素应用一些样式。然后使用
.innerHTML
属性将分隔符中的完整文本替换为新文本。这很好,但我必须向后键入,因为在插入文本时,我的光标会重置为零。我尝试在插入之前记录
selectionStart
的值,然后执行

element.selectionStart=oldSelectionStart+1;

但它不起作用。我假设这是因为chrome的渲染管道,其中JavaScript在渲染页面之前运行,光标在渲染时重置,而不是在设置时重置。。。有人能帮忙吗?我如何将光标保持在原来的位置?

事实上@PabloRecalde它是聚焦的,我已经尝试了所有方法来改变光标的位置,它只是不断地将光标恢复到起始位置。也许问题在于事情发生的顺序,在尝试移动光标之前,请确保所有新内容都已准备就绪。@PabloRecalde Yea,结果是设置了更多的s**t:javascript也注意到,您可以尝试
document.body.innerHTML=“lol”;alert(document.body.innerHTML)
,并且在渲染之前,值会随之更改,我认为这就是问题所在