Javascript: как я могу получить текст вне выделенного диапазона текста - PullRequest
1 голос
/ 25 января 2012

Я знаю, как получить текст из выбранного диапазона через:

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

Вопрос - как я могу получить текст до выбранного диапазона и после?Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 25 января 2012

Вот функция, которая делает это, используя DOM Range в большинстве браузеров и TextRange в IE <9. </p>

Живая демоверсия: 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
    };
}
0 голосов
/ 25 января 2012

В верхней части моей головы вы должны добавить проверки, если выбранный текст находится по обе стороны: Допустим, элемент - это текстовое поле:

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];

OR

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);
0 голосов
/ 25 января 2012

Я не уверен, почему вы хотите знать строку, предшествующую выделению, и строку, следующую за ним. По сути, эти две строки вместе будут всей вашей страницей за вычетом вашего выбора.

Вот хорошее введение в диапазоны: http://www.quirksmode.org/dom/range_intro.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...