Функция для кроссбраузерного получения выделенного текста на 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()); } }); });
Вот и все, может быть кому-нибудь и пригодится :)
Спасибо за скриптик, всё за…ой, классно работает) Круто!
Используемые методы не всегда возвращают строку.
Можно проверить, например,
alert(text.length)
в разных браузерах.Рекомендую сделать
return text.toString();
в конце.Спасибо!=)
Спасибо за полезный код.
Охтыжблин! Пол дня гуглил на эту тему, а в конце дня нашёл готовое решение!
Человек, спасибо! Ты спас меня! :)
Спасибо, давно хотел поставить такую обратную связь на сайт справочной города Чайковский.
Отлично, спасибо!
Однако есть недочет. В ниже указанном фрагменте кода стоит после вывода вернуть переменной isCtrl значение false.
if (e.which == 13 && isCtrl == true) {
// получаем и показываем выделенный текст
alert(getSelectedText());
isCtrl = false;
}
В противном случае после первой такой активации проверка будет пропускать нажатие даже одного Enter’a. :)