0

我正在尝试在 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;
4

1 回答 1

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());
}

在 Rangy中用于将 IETextRange对象转换为 DOM Range 对象的过程比您已经拥有的更复杂和更快(至少对于长文档而言)。如果您有兴趣,相关代码在此文件顶部附近:http ://code.google.com/p/rangy/source/browse/trunk/src/js/core/wrappedrange.js

于 2010-12-07T18:21:34.637 回答