IE:有没有一种快速的方法可以在designMode上的iframe中获取插入位置?

时间:2010-12-07 18:02:44

标签: javascript internet-explorer range caret

我试图在设计模式下在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;

1 个答案:

答案 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