Как получить позицию курсора в текстовом поле (textarea) на JavaScript?

JavaScript, Вопросы и ответы
27 февраля 2012

Вопрос

Как на JavaScript можно получить позицию курсора в текстовом поле textarea? Например, пусть есть такой текст с курсором:
Это некий| текст.

Функция должна вернуть 9.


Ответ №1

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

Если бы не Internet Explorer, можно было бы использовать функцию textarea.selectionStart, она работает в Firefox, Chrome, Safari. Но поскольку IE не поддерживает эту функцию, можно использовать следующую:

function getCaret(el) { 
  if (el.selectionStart) { 
    return el.selectionStart; 
  } else if (document.selection) { 
    el.focus(); 

    var r = document.selection.createRange(); 
    if (r == null) { 
      return 0; 
    } 

    var re = el.createTextRange(), 
        rc = re.duplicate(); 
    re.moveToBookmark(r.getBookmark()); 
    rc.setEndPoint('EndToStart', re); 

    return rc.text.length; 
  }  
  return 0; 
}

Использовать так:

alert(getCaret(document.getElementById('thetext')));

Пример

Ещё есть плагин для jQuery для работы для задания и получения позиции курсора (каретки).

Если Вам надо задать, а не получить позицию курсора в textarea, тогда прочтите этот вопрос.

1 комментарий

  • Sanych:

    Замечательно! Очень помогло. Только хотелось бы больше комментарий в коде. Спасибо.
    bitloor.com

Добавить комментарий


(обязательно)