1

当使用在页面中选择文本和恢复所选文本的方法时,我发现在两者之间运行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/

这个小提琴的目的是选择文本,将其转换为大写,然后重新选择文本。

4

1 回答 1

3

如何最好地保存和恢复选择实际上取决于您在做什么。对于您的具体示例,如果现有文本只是对其大小写进行转换,我建议使用基于字符索引的方法,例如https://stackoverflow.com/a/5596688/96100(尽管该答案需要 Rangy,但可以被简单地改变为不需要它:http: //jsfiddle.net/Y8pJ7/8)。

对于其他一些情况,更好的方法是在选择的开始和结束处使用不可见的标记元素,这是 Rangy 的选择保存/恢复模块所采用的方法(披露:我是 Rangy 的作者)。

2012 年 6 月 18 日更新

Rangy 现在通过新的TextRange 模块演示)具有基于字符偏移的选择和范围的保存和恢复。

于 2012-03-23T15:10:18.783 回答