Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE:有没有一种快速的方法可以在iframe on designMode中获得插入符号的位置?_Javascript_Internet Explorer_Range_Caret - Fatal编程技术网

Javascript IE:有没有一种快速的方法可以在iframe on designMode中获得插入符号的位置?

Javascript IE:有没有一种快速的方法可以在iframe on designMode中获得插入符号的位置?,javascript,internet-explorer,range,caret,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

在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;
var r=doc.selection.createRange();
r、 塌陷(假);
doc.execCommand(“SelectAll”)//这太难看了。。
var r2=doc.selection.createRange();
r2.选择();
//…这太慢了
而(r.compareEndPoints(“EndToEnd”,r2)<0){
r2.移动结束(“字符”,-1)
r2.选择();
}
pos=r2.text.length;
是的,您可以使用my library,它为您提供了一种在所有使用该界面的浏览器中执行此操作的单一方法。以下假设您将iframe的
窗口
对象存储在名为
iframeWin
的变量中:

var sel = rangy.getSelection(iframeWin);
if (sel.rangeCount > 0) {
    var selectedRange = sel.getRangeAt(0);
    alert(selectedRange.toString());
}
在Rangy中将IE的
TextRange
对象转换为DOM范围对象的过程比您已有的过程更复杂、速度更快(至少对于长文档)。如果您感兴趣,相关代码就在这个文件的顶部附近:

是的,您可以使用我的库,它为您提供了一种在所有使用该界面的浏览器中执行此操作的单一方法。以下假设您将iframe的
窗口
对象存储在名为
iframeWin
的变量中:

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

在Rangy中将IE的
TextRange
对象转换为DOM范围对象的过程比您已有的过程更复杂、速度更快(至少对于长文档)。如果您感兴趣,相关代码就在这个文件的顶部附近:

这看起来像是我过去做的。很抱歉文本编辑是一场噩梦。@mwilcox:我做了很多工作,使它不再是一场噩梦。看看我的答案。这是我过去的表现。很抱歉文本编辑是一场噩梦。@mwilcox:我做了很多工作,使它不再是一场噩梦。看我的答案。这真的很酷。立即解决这个问题和最终的未来问题。谢谢,太棒了,蒂姆。如果我需要再做一次,我一定会看看这个。这真的很酷。立即解决这个问题和最终的未来问题。谢谢,太棒了,蒂姆。如果我需要再做一次那项工作,我一定要检查一下。