Кроссбраузерное получение и установка выделения в INPUT
Шпаргалка для себя, чтобы не искать. Набор полезных функций для работы с полями ввода, такими как TEXTAREA и INPUT TYPE="TEXT". С помощью этих функций можно узнать, какой фрагмент текста выделен или же наоборот, выделить текст заданной длины с определенной позиции.Функция получения границ выделения в поле ввода. В качестве параметров передается элемент поля ввода, на выходе объект с значениями начальной и конечной позиции выделения.
Code (JavaScript) : Убрать нумерацию
- //---------------------------------------------------------
- // Получение границ выделения в поле ввода
- //---------------------------------------------------------
- function get_selected_input(el) {
- var pos={start:0, end:0};
- if (el.selectionStart) {
- // Mozilla + Opera + Chrome + Safari
- pos={
- start: el.selectionStart,
- end: el.selectionEnd
- };
- }
- else {
- // IE
- if (document.selection) {
- var sel=el.createTextRange();
- sel.moveToBookmark(document.selection.createRange().getBookmark());
- var before = el.createTextRange();
- before.collapse(true);
- before.setEndPoint('EndToStart', sel);
- pos={
- start: before.text.length,
- end: (before.text.length + sel.text.length)
- };
- }
- }
- return pos;
- }
Code (JavaScript) : Убрать нумерацию
- //---------------------------------------------------------
- // Установка границ выделения в поле ввода
- //---------------------------------------------------------
- function set_selected_input(el,start,end) {
- // Корректировка границ
- if (start>end) {
- var tmp=start;
- start=end;
- end=tmp;
- }
- if (el.selectionStart) {
- // Mozilla + Opera + Chrome + Safari
- el.setSelectionRange(start,end);
- }
- else {
- // IE
- var sel=el.createTextRange();
- sel.collapse(true);
- sel.moveStart('character',start);
- sel.moveEnd('character', (end-start));
- sel.select();
- }
- return true;
- }
Функция для получения позиции курсора в поле ввода. Есть проблемы с получением позиции в совсем старых IE, в новых браузерах все работает корректно.
Code (JavaScript) : Убрать нумерацию
- //---------------------------------------------------------
- // Получение позиции курсора в поле ввода
- //---------------------------------------------------------
- function get_caret_pos(el) {
- var pos=0;
- if (el.selectionStart || el.selectionStart=='0') {
- if (el.selectionDirection=='backward') {
- pos=el.selectionStart;
- }
- else {
- pos=el.selectionEnd;
- }
- }
- else if (document.selection) {
- el.focus();
- var r=document.selection.createRange();
- if (r) {
- var re=el.createTextRange();
- var rc=re.duplicate();
- re.moveToBookmark(r.getBookmark());
- rc.setEndPoint('EndToStart', re);
- var add_newlines=0;
- for (var i=0; i<rc.text.length; i++) {
- if (rc.text.substr(i,2) == '\r\n') {
- add_newlines+=2;
- i++;
- }
- }
- pos=rc.text.length-add_newlines;
- }
- }
- return pos;
- }
Code (JavaScript) : Убрать нумерацию
- //---------------------------------------------------------
- // Получение выделенного текста на странице
- //---------------------------------------------------------
- function get_selected_text() {
- var txt='';
- if (document.getSelection) {
- // Mozilla + Opera
- txt=document.getSelection();
- }
- else if (document.selection) {
- // IE
- txt=document.selection.createRange().text;
- }
- else if (window.getSelection) {
- // Chrome + Safari
- txt=window.getSelection();
- }
- txt=txt.toString();
- return txt;
- }
Code (JavaScript) : Убрать нумерацию
- //---------------------------------------------------------
- // Добавление текста в поле ввода
- //---------------------------------------------------------
- function insert_data(el, text, before, after) {
- var tmp;
- // Internet Explorer
- if (document.selection) {
- var str = document.selection.createRange().text;
- el.focus();
- var sel = document.selection.createRange();
- sel.text = before+text+after;
- if (text=='') {
- tmp=after.length;
- sel.moveStart('character',-tmp);
- sel.moveEnd('character',-tmp);
- }
- sel.select();
- }
- // Mozilla
- else if (el.selectionStart || el.selectionStart == '0') {
- var start_pos = el.selectionStart;
- var end_pos = el.selectionEnd;
- if (text=='') {
- text = el.value.substring(start_pos, end_pos);
- }
- el.value = el.value.substring(0, start_pos) + before + text +
- after + el.value.substring(end_pos, el.value.length);
- if (text=='') {
- tmp=before.length;
- el.selectionStart=start_pos+tmp;
- el.selectionEnd=end_pos+tmp;
- }
- else {
- tmp=start_pos+before.length+after.length+text.length;
- el.selectionStart=tmp;
- el.selectionEnd=tmp;
- }
- el.focus();
- }
- return true;
- }
Просмотров: 863 | Комментариев: 0
Метки: JavaScript
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария