Как получить выделенный текст в текстовой области с помощью jQuery в Internet Explorer 7? - PullRequest
3 голосов
/ 25 августа 2011

Я попытался плагин jquery-fieldselection , чтобы получить выделенный текст в textarea.

Он отлично работает в Firefox и Chrome, но не в Internet Explorer 7.

Я использую метод getSelection() следующим образом:

textarea.getSelection();

Когда текст в текстовой области равен 12345, и весь этот текст выделен, Firefox и Chrome возвращают:

start: 0    // Correct!
end: 5

, а Internet Explorer 7 возвращает:

start: 5    // Why ??
end: 5

Я ищу решение для кросс-браузерного использования jQuery.

Ответы [ 2 ]

6 голосов
/ 25 августа 2011

только что посмотрел библиотеку, и она ведет себя по-разному для IE, так как она не поддерживает некоторые методы, которые современные браузеры делают .. может быть, код там не идеален ..

использует следующий метод:

function getInputSelection(el) {
    var start = 0, end = 0, normalizedValue, range,
        textInputRange, len, endRange;

    if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
        start = el.selectionStart;
        end = el.selectionEnd;
    } else {
        range = document.selection.createRange();

        if (range && range.parentElement() == el) {
            len = el.value.length;
            normalizedValue = el.value.replace(/\r\n/g, "\n");

            // Create a working TextRange that lives only in the input
            textInputRange = el.createTextRange();
            textInputRange.moveToBookmark(range.getBookmark());

            // Check if the start and end of the selection are at the very end
            // of the input, since moveStart/moveEnd doesn't return what we want
            // in those cases
            endRange = el.createTextRange();
            endRange.collapse(false);

            if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
                start = end = len;
            } else {
                start = -textInputRange.moveStart("character", -len);
                start += normalizedValue.slice(0, start).split("\n").length - 1;

                if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
                    end = len;
                } else {
                    end = -textInputRange.moveEnd("character", -len);
                    end += normalizedValue.slice(0, end).split("\n").length - 1;
                }
            }
        }
    }

    return {
        start: start,
        end: end
    };
}

как его использовать:

вам нужен объект dom текстовой области .. таким образом:

var textArea=    $("textarea")[0] or getElementbyId("textareaid");

var selectedText=getInputSelection(textArea);

var start=selectedText.start;
var end=selectedText.end;

Live Demo

4 голосов
/ 02 сентября 2012

Вот очень сжатый и компактный плагин jquery, который работает для IE7, IE8, IE9, FF, Chrome. Позволяет получать / устанавливать начальную и конечную позиции выделения, а также программно заменять выделенный текст.Рабочий пример / версия кода здесь: http://jsfiddle.net/hYuzk/3/ Версия с более подробными комментариями и т. Д. Здесь: http://jsfiddle.net/hYuzk/4/

...