Кроссбраузерное получение выделенного текста javascript

Кроссбраузерное получение выделенного текста javascriptФункция для кроссбраузерного получения выделенного текста на javascript с использование библиотеки jquery.
Сегодня на одном из сайтов наткнулся на интересный функционал — при выделении текста и нажатии комбинации клавиш Ctrl + Enter владельцу сайта отправляется выделенный текст. Сделано это с целью минимизировать количество ошибок в текстах. Мне стало интересно как это работает и я решил написать часть функционала — получение выделенного текста при нажатии Ctrl + Enter.

Оказывается что получить выделенный текст не так просто, практически каждый браузер отдает выделенный текст по разному. Немного помчавшись, я написал функцию, которая получает выделенный текст кроссбраузерно. Ниже приведен код этой функции:

// функция для получение выделенного текста
function getSelectedText(){
    var text = "";
    if (window.getSelection) {
        text = window.getSelection();
    }else if (document.getSelection) {
        text = document.getSelection();
    }else if (document.selection) {
        text = document.selection.createRange().text;
    }
    return text;
}

И пример использования функции, при нажатии Ctrl + Enter:

// пример использования
$(document).ready(function() {
    // при нажатии на Ctrl + Enter
    var isCtrl = false;
    $(document).keyup(function (e) {
        if(e.which == 17) isCtrl = false;
    }).keydown(function (e) {
        if(e.which == 17) isCtrl=true;
        if(e.which == 13 && isCtrl == true) {
            // получаем и показываем выделенный текст
            alert(getSelectedText());
        }
    });
});

Вот и все, может быть кому-нибудь и пригодится :)

Рассказать друзьям:


Оценить:
(1 оценок, среднее: 4,00 из 5)

Кроссбраузерное получение выделенного текста javascript: 7 комментариев

  1. Используемые методы не всегда возвращают строку.
    Можно проверить, например, alert(text.length) в разных браузерах.
    Рекомендую сделать return text.toString(); в конце.

  2. Отлично, спасибо!
    Однако есть недочет. В ниже указанном фрагменте кода стоит после вывода вернуть переменной isCtrl значение false.

    if (e.which == 13 && isCtrl == true) {
    // получаем и показываем выделенный текст
    alert(getSelectedText());
    isCtrl = false;
    }

    В противном случае после первой такой активации проверка будет пропускать нажатие даже одного Enter’a. :)

Добавить комментарий для Виктор Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code