当使用在页面中选择文本和恢复所选文本的方法时,我发现运行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/ http://jsfiddle.net/blowsie/Y8pJ7/
这个小提琴的目标是选择文本,将其转换为大写,然后重新选择文本。
如何最好地保存和恢复选择实际上取决于您正在做什么。对于您的具体示例,现有文本只是进行大小写转换,我建议采用基于字符索引的方法,例如https://stackoverflow.com/a/5596688/96100 https://stackoverflow.com/a/5596688/96100(虽然这个答案需要 Rangy,但可以简单地更改为不需要它:http://jsfiddle.net/Y8pJ7/8 http://jsfiddle.net/Y8pJ7/8).
对于其他一些情况,更好的方法是在选择的开始和结束处使用不可见的标记元素,这是选择保存/恢复模块 http://code.google.com/p/rangy/wiki/SelectionSaveRestoreModule of Rangy http://code.google.com/p/rangy/(披露:我是兰吉的作者)。
2012 年 6 月 18 日更新
Rangy 现在可以通过新的基于字符偏移的选项和范围进行保存和恢复文本范围模块 http://code.google.com/p/rangy/wiki/TextRangeModule (demo http://rangy.googlecode.com/svn/trunk/demos/textrange.html).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)