[英]Find start position of text range in 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
返回未定義。 那么我該如何獲得職位呢?
通過使用Tim Down出色的Rangy庫,我找到了一種解決方法。 以下代碼
var range = rangy.createRange();
range.setStart(document.getElementById("editor"), 0);
我的find函數最終放棄了這種方法,但這是使用Rangy解決原始問題的方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.