我在可疑的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中运行?
提前感谢您的帮助。
答案 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);