我想利用可以从 window.getSelection() 检索的选择对象。所以我最初的尝试是检查从 getRangeAt() 返回的范围是否可以使用 addRange() 应用回选择。
请参阅下面的 jsfiddle,它什么都不做,只是尝试从 getSelection() 保存范围并在不更改任何其他内容的情况下恢复它。
var selection = window.getSelection()
$('#textfield').keyup(function() {
var range = selection.getRangeAt(0)
selection.removeAllRanges()
selection.addRange(range)
})
它最初看起来不错并且工作自然,但是当您输入长行时,导致自动换行,换行附近的左箭头键不会将插入符号正确移动到前一行,而是弹回。
aaaaaa
^aaaaaa
(original caret(^) at end of the second line)
aaaaa^
aaaaa
(moved the caret by pressing left arrow key)
aaaaa
^aaaaa
(the caret immediately bounced back to the second line)
这个效果可以在 Firefox 中显示(我的是 FF 16)。
这是一个已知的错误?或者有什么我滥用了?Chrome似乎没有问题。