getselection - execCommand insertHTML 中断存储的 window.getSelection()

标签 getselection execcommand inserthtml

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

相关文章:

javascript - 从另一个框架中获取选定的文本

javascript - 跨多个标签的 getSelection 和 surroundContents

javascript - window.getSelection() 不给出 html 节点

javascript - window.getSelection 使用 jquery 将类添加到选择

javascript - 有没有办法确定 execCommand ('undo' ) 是否可执行? [JavaScript]

javascript - 在插入符号位置插入 HTML 而不创建对象

Javascript window.getSelection() 替代方案

javascript - 保存选定的文本范围以备后用 不起作用

javascript - 从表单提交中添加数组元素