在页面中使用选择文本和恢复所选文本的方法时,我发现运行execCommand('insertHTML...
in Between 会导致存储的选择中断。
这是如何选择和恢复文本的示例。
// Get Selection
var sel = window.getSelection().getRangeAt(0);
// Clear Selections
window.getSelection().removeAllRanges();
// Restore Selection
window.getSelection().addRange(sel)
这工作正常,但是一旦你运行 execCommand('insertHTML..
选择endOffset
将自身设置为与选择 startOffset
相同的值
这有什么原因吗?更重要的是有办法解决这个问题吗?
可以在此处查看该错误的完整示例,以及一些基本的控制台日志记录。 http://jsfiddle.net/blowsie/Y8pJ7/
这个 fiddle 的目的是选择文本,将其转换为大写,然后重新选择文本。
最佳答案
如何最好地保存和恢复选择实际上取决于您正在做什么。对于您的具体示例,现有文本只是进行大小写转换,我建议采用基于字符索引的方法,例如 https://stackoverflow.com/a/5596688/96100 (虽然这个答案需要 Rangy,但可以简单地更改为不需要它: http://jsfiddle.net/Y8pJ7/8 )。
对于其他一些情况,更好的方法是在选择的开始和结束处使用不可见的标记元素,这是 selection save/restore module 所采取的方法。的Rangy (披露:我是兰吉的作者)。
2012 年 6 月 18 日更新
Rangy 现在可以通过新的 TextRange module 基于字符偏移量保存和恢复选择和范围。 (demo)。
关于getselection - execCommand insertHTML 中断存储的 window.getSelection(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841082/