2010-12-07 47 views
0

我想在设计模式下,在IE8中获取iframe中某些文本的插入符号位置。 我使用的代码有效,但对于长文本,它的表现很糟糕,因为它选择所有文本,然后开始一次移动一个字符范围的结尾。IE:有没有一种快速的方法在designMode的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

这看起来我是如何做到了这一点。抱歉。文本编辑是一场噩梦。 – mwilcox 2010-12-07 18:14:45

+0

@mwilcox:我做了很多工作,让它变成一场噩梦。看到我的答案。 – 2010-12-07 18:28:28

回答

3

是的,你可以用我的Rangy库,它给你使用DOM Level 2 Range接口在所有浏览器这样的单一方式。下面假设你已经存储在一个名为iframeWin变量iframe的window对象:

var sel = rangy.getSelection(iframeWin); 
if (sel.rangeCount > 0) { 
    var selectedRange = sel.getRangeAt(0); 
    alert(selectedRange.toString()); 
} 

用于IE的TextRange对象转换为DOM Range对象的四肢瘦长是更加复杂和更快(长文档,至少过程)比你已经有的。如果你有兴趣,相关的代码是接近这个文件的顶部:http://code.google.com/p/rangy/source/browse/trunk/src/js/core/wrappedrange.js

相关问题