我试图在IE11中修复一个应用程序,我陷入了这个错误:在较早的IE版本中,它是一个简单的选择对象,但在IE11中被废弃了。MSDN页面提供了使用getSelection来代替它,但是它不是相同的。我需要根据选择创建一个TextRange,在旧的API中有一个简单的解决方案:
// there is a TextRange object what I need
var textRange = document.selection.createRange();新的HTMLSelection对象没有createRange()方法,我也没有找到任何合适的解决方案,也就是没有修改DOM。
我尝试这样做:http://jsfiddle.net/p4Lu4/1/ (用法:选择一些文本并按任意键。)
它的问题是:如果您选择抛出其中一个红色框,它将删除该框。
有谁知道更好的解决办法吗?
解决方案:
我想我找到了解决办法。这并不是最好和最美好的,但它对我是有用的:我可以从选择中创建完全相同的TextRange。
http://jsfiddle.net/p4Lu4/4/
更新2:
我为此创建了一个模块:https://gist.github.com/festo/50fe800c7369db140a62
发布于 2014-08-21 16:52:59
我的兰迪库有代码将DOM兼容的范围转换为IE TextRange,作为在IE <= 8中提供DOM范围和选择支持的一部分。
var textRange = rangy.getSelection().getNativeTextRange();注意,范围选择的getNativeTextRange()方法仅存在于IE中。
另一种选择是使用Rangy的TextRange模块 (其中包括向Rangy的range对象添加一个类似IE的findText()方法),以及用于高亮显示的类应用程序模块。这将在所有主要浏览器中工作。
演示:http://jsfiddle.net/sycqeev2/
当你高亮显示文本并按下键时,我不知道在你的演示中会发生什么,所以我没有尝试用它做任何事情。
https://stackoverflow.com/questions/24958043
复制相似问题