Выделение фрагмента строки в TextArea - PullRequest
5 голосов
/ 23 августа 2010

Я пытаюсь выделить фрагмент текста в текстовой области. У меня есть длинная строка в этом TextArea:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident

И у меня есть функция, которая может извлечь первое вхождение строки, которое находится между переменными "begin" и "end". Например:

extract("ipsum", "consectetur") // This will give: "dolor sit amet,"

Но я хочу выбрать результат функции, чтобы полученная строка «dolor sit amet» была выделена.

Возможно ли это? Как я могу это сделать?

Спасибо,

Привет.

Ответы [ 3 ]

4 голосов
/ 23 августа 2010

Вот некоторый код, который выделит диапазон текста в текстовой области во всех основных браузерах, включая IE 6 +:

function offsetToRangeCharacterMove(el, offset) {
    return offset - (el.value.slice(0, offset).split("\r\n").length - 1);
}

function setSelection(el, start, end) {
    if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
        el.selectionStart = start;
        el.selectionEnd = end;
    } else if (typeof el.createTextRange != "undefined") {
        var range = el.createTextRange();
        var startCharMove = offsetToRangeCharacterMove(el, start);
        range.collapse(true);
        if (start == end) {
            range.move("character", startCharMove);
        } else {
            range.moveEnd("character", offsetToRangeCharacterMove(el, end));
            range.moveStart("character", startCharMove);
        }
        range.select();
    }
}

var textarea = document.getElementById("your_textarea");
var val = textarea.value;
var start = val.indexOf("ipsum") + 5, end = val.indexOf("consectetur");
setSelection(textarea, start, end);
2 голосов
/ 23 августа 2010

Вы не можете выделить различные части текста в текстовой области. Вы можете выбрать часть, но не несколько частей, и выделение не выделяется. Вы можете взять содержимое вашей текстовой области, но, например, <div> и выделить фразы, окружив их <span class="highlight">...</span>

2 голосов
/ 23 августа 2010

Я помню, как видел это некоторое время назад ... http://www.din.or.jp/~hagi3/JavaScript/JSTips/Mozilla/Samples/NSHTMLTextAreaElement.htm

Это довольно сложно, и я никогда не смогу обойтись без этого. Не знаю, если это то, что вам нужно, или если вы можете использовать его вообще. :)

...