簡體   English   中英

在IE11中查找文本范圍的開始位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM