我有以下代码可以在 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
返回未定义。那么如何获得职位呢?