为什么Rangy图书馆在Opera中无法满足?

时间:2012-05-20 11:07:24

标签: selection opera contenteditable rangy

我在可疑的DIV中使用了受欢迎的Rangy library。我的代码非常简单:

var saved_selection = false;

$('#contenteditable').bind('keypress mouseup', function(e){
  $(this).find('.rangySelectionBoundary').remove();
  saved_selection = rangy.saveSelection();
});​

现在这在Chrome和FF中非常有用。然而,在Opera中它表现得非常奇怪,因为它不允许在contenteditable中插入任何字符,而是放弃焦点,或者至少看起来如此。

我准备了jsFiddle进行测试。在Opera中,无法在可编辑的DIV中输入任何字符:http://jsfiddle.net/twST6/1/

任何人都可以解释并解决我的问题如何使这段代码在Opera中运行?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

有趣。我认为问题是在Opera中的按键事件期间更改DOM会停止发生本机浏览器按键操作(我认为我以前见过)。除了避免在每个按键上保存选择之外,我没有看到简单的方法。另一种解决方案是将选择保存为内容中的字符索引,这不会改变DOM,因此应该起作用。看到这个答案:

https://stackoverflow.com/a/5596688/96100

我也接近为Rangy发布更强大的基于字符索引的选择保存/恢复。请参阅此处的演示:

http://rangy.googlecode.com/svn/trunk/demos/textrange.html

顺便提一下,有一种内置方法可以删除Rangy中的选择标记:

rangy.removeMarkers(saved_selection);