Javascript:如何获取所选文本范围之外的文本

Javascript: how can I get text outiside of selected text range

本文关键字:文本 范围 何获取 获取 Javascript      更新时间:2023-09-26

我知道如何通过以下方式从选定范围内获取文本:

if (elem.getSelection) {
        sel = elem.getSelection();
        if (sel.rangeCount) {
             selectedText=sel.getRangeAt(0);
        }
    } else if (elem.selection) {
        selectedText=elem.selection.createRange();
    }

问题 - 如何在选定范围之前和之后获取文本?提前谢谢。

这里有

一个函数,可以在大多数浏览器中使用 DOM Range,在 IE <9 中使用 TextRange

现场演示:http://jsfiddle.net/bVpqR/

法典:

function getUnselectedText(containerEl) {
    var sel, range, tempRange, before = "", after = "";
    if (typeof window.getSelection != "undefined") {
        sel = window.getSelection();
        if (sel.rangeCount) {
            range = sel.getRangeAt(0);
        } else {
            range = document.createRange();
            range.collapse(true);
        }
        tempRange = document.createRange();
        tempRange.selectNodeContents(containerEl);
        tempRange.setEnd(range.startContainer, range.startOffset);
        before = tempRange.toString();
        tempRange.selectNodeContents(containerEl);
        tempRange.setStart(range.endContainer, range.endOffset);
        after = tempRange.toString();
        tempRange.detach();
    } else if ( (sel = document.selection) && sel.type != "Control") {
        range = sel.createRange();
        tempRange = document.body.createTextRange();
        tempRange.moveToElementText(containerEl);
        tempRange.setEndPoint("EndToStart", range);
        before = tempRange.text;
        tempRange.moveToElementText(containerEl);
        tempRange.setEndPoint("StartToEnd", range);
        after = tempRange.text;
    }
    return {
        before: before,
        after: after
    };
}

我不确定为什么你会想知道选择之前的字符串和随后的字符串。基本上,这两个字符串一起将是您的整个页面减去您的选择。

以下是对范围的很好的介绍:http://www.quirksmode.org/dom/range_intro.html

从我的头顶上,您应该添加验证,以防所选文本位于两侧:假设 elem 是一个文本框:

if (elem.getSelection) {
        sel = elem.getSelection();
        if (sel.rangeCount) {
             selectedText=sel.getRangeAt(0);
        }
    } else if (elem.selection) {
        selectedText=elem.selection.createRange();
    }

var texts = elem.value.split(selectedText);
var before = texts[0];
var after = texts[2];

var text = element.value;
var before = text.substring(0,text.indexOf(selectedText));
var after = text.replace(before + selectedtext,''); // or after = text.substring(before.length + selectedText.length);