当使用选择文本和恢复页面中所选文本的方法时,我发现在中间运行execCommand('insertHTML...
会导致存储的选择中断。
这是如何选择和恢复文本的示例。
// 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/
这个小提琴的目的是选择文本,将其转换为大写,然后重新选择文本。
答案 0 :(得分:3)
如何最好地保存和恢复选择真的取决于你正在做什么。对于您的具体示例,现有文本只是对其案例进行了转换,我建议使用基于字符索引的方法,例如https://stackoverflow.com/a/5596688/96100(尽管该答案需要Rangy,但可以通过简单的更改而不需要它: http://jsfiddle.net/Y8pJ7/8)。
对于其他一些情况,更好的方法是在选择的开始和结束时使用不可见的标记元素,这是selection save/restore module的Rangy采取的方法(披露:我是Rangy的作者)。
2012年6月18日更新
Rangy现在通过新的TextRange module(demo)进行基于字符偏移的选择和范围保存和恢复。