通过javascript更新后,我在内容可编辑div中保留插入符号位置时遇到困难。
我有一个带有 contenteditable 属性的 div。
<div id="form", contenteditable="true">
</div>
假设用户输入“培根太好了!我想要更多”,我更新了 div 中的 html,其中我用 span 包裹了某些单词。从上面的html,它会变成这样:
<div id="form", contenteditable="true">
Bacon is so <span>good</span>! I want more!
</div>
我通过使用 jQuery 更新 html 来做到这一点......
$('#form').html(...here I put the updated html...)
然而,在此之后,插入符号(光标)返回到 div 的开头。我想将插入符号保持在与更新 div 之前相同的位置,以便用户继续输入而不会出现任何问题。
目前,我有以下代码:
在更新 div 之前,我首先保存插入符号位置。
if(window.getSelection) {
window.savedRange = window.getSelection().getRangeAt(0);
} else if(document.selection) {
window.savedRange = document.selection.createRange();
}
然后我尝试通过
$('#form').get(0).focus();
if (window.savedRange != null) {
if (window.getSelection) {
var s = window.getSelection();
if (s.rangeCount > 0)
s.removeAllRanges();
s.addRange(window.savedRange);
} else if (document.createRange) {
window.getSelection().addRange(window.savedRange);
} else if (document.selection) {
window.savedRange.select();
}
}
我需要保留插入符号,因为这一切都应该在用户打字时发生。上面的代码没有做任何事情。它仍然返回到 div 的开头。