我试图在设计模式下在IE8中获取iframe中的某些文本的插入位置。 我所使用的代码,但对于长文本,它表现得非常糟糕,因为它选择了所有文本,然后开始一次一个字符的范围结束。
我想知道是否有一种更快更优雅的方式来获得IE当前的插入位置?这是我目前的代码:
var r = doc.selection.createRange();
r.collapse(false);
doc.execCommand("SelectAll") //this is ugly..
var r2 = doc.selection.createRange();
r2.select();
//..and this is slow
while (r.compareEndPoints("EndToEnd", r2) < 0) {
r2.moveEnd("character", -1)
r2.select();
}
pos = r2.text.length;
答案 0 :(得分:3)
是的,您可以使用我的Rangy库,这样您就可以使用DOM Level 2 Range界面在所有浏览器中执行此操作。以下假设您将iframe的window
对象存储在名为iframeWin
的变量中:
var sel = rangy.getSelection(iframeWin);
if (sel.rangeCount > 0) {
var selectedRange = sel.getRangeAt(0);
alert(selectedRange.toString());
}
用于将IE的TextRange
对象转换为Rangy中的DOM Range对象的过程比现有的更复杂,速度更快(至少对于长文档)。如果您有兴趣,相关代码就在此文件的顶部:http://code.google.com/p/rangy/source/browse/trunk/src/js/core/wrappedrange.js