在IE11中查找文本范围的起始位置



我有以下代码来在IE11 中查找一段文本

var search_position = 0;
function findMyText(find)
{       
// create range (selects all text)
var range = document.body.createTextRange();
range.moveToElementText(document.getElementById("editor"));
if(search_position == 0)
{
range.moveStart("word", 0);                     
range.findText(find);
}
// find the nth word that matches, where n is search_position
for (var i = 0; i < search_position; i++)
{
range.moveStart("word", 1);                     
range.findText(find);
}
search_position++;
range.select();
var l = range.text.length
if(l < find.length)
{
search_position = 0;
}
}

这会找到find的每个连续实例并选择它。它的工作原理是找到一段文本的第一个实例,标记搜索索引,然后移动到下一个单词。

我真正想做的是从某个光标位置开始,而不遍历所有文本。在中,如果用户将光标放在文本的中间,我想从那一点开始搜索。我还想添加一个替换函数。我可以移动到像这个这样的特定字符位置

range.moveStart("character", x);

其中x是字符位置。我可以使用以下代码从光标位置获取这个字符位置。

function getCaretPosition() {
var ie = (typeof document.selection != "undefined" && document.selection.type != "Control") && true;
var w3 = (typeof window.getSelection != "undefined") && true;
var caretOffset = 0;
if (w3) {
var range = window.getSelection().getRangeAt(0);
var preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(editor);
preCaretRange.setEnd(range.endContainer, range.endOffset);
caretOffset = preCaretRange.toString().length;
}
else if (ie) {
var textRange = document.selection.createRange();
var preCaretTextRange = document.body.createTextRange();
preCaretTextRange.expand(editor);
preCaretTextRange.setEndPoint("EndToEnd", textRange);
caretOffset = preCaretTextRange.text.length;
}
return caretOffset;
}

不能做的,需要做的是找到我的范围的当前起始位置。我需要知道这一点,我的替换方法才能正确工作。当我替换一个单词时,我需要知道我在文档中的位置。

range.startOffset返回undefined。那么我该如何获得这个职位呢?

我通过使用Tim Down出色的Rangy库找到了一个解决方法。以下代码

var range = rangy.createRange();
range.setStart(document.getElementById("editor"), 0);

我的find函数最终放弃了这种方法,但这是使用Rangy 解决原始问题的方法

最新更新