Как вы получаете позицию каретки в <textarea>
использовании JavaScript?
Например: This is| a text
Это должно вернуться 7
.
Как бы вы получили, чтобы он возвращал строки, окружающие курсор / выделение?
Например: 'This is', '', ' a text'
.
Если выделено слово «есть», оно вернется 'This ', 'is', ' a text'
.
javascript
cursor
textarea
caret
Беспокойный странник
источник
источник
textarea.selectionStart
,textarea. selectionEnd
,textarea.setSelectionRange
developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElementОтветы:
С Firefox, Safari (и другими браузерами на основе Gecko) вы можете легко использовать textarea.selectionStart, но для IE это не работает, поэтому вам придется сделать что-то вроде этого:
( полный код здесь )
Я также рекомендую вам проверить плагин jQuery FieldSelection , он позволяет вам делать это и многое другое ...
Изменить: я на самом деле повторно реализовал вышеуказанный код:
Проверьте пример здесь .
источник
Safari (and other Gecko based browsers)
Похоже, что Safari использует Gecko. Геккон - двигатель Мозиллы; Safari использует WebKit.if (el.selectionStart) { return el.selectionStart; }
Обновлено 5 сентября 2010
Видя, что все, кажется, направляются сюда для решения этой проблемы, я добавляю свой ответ на похожий вопрос, который содержит тот же код, что и этот ответ, но с полным фоном для тех, кто заинтересован:
IE в document.selection.createRange не содержит начальных или конечных пустых строк
Учет конечных разрывов строк в IE довольно сложен, и я не видел ни одного решения, которое делает это правильно, включая любые другие ответы на этот вопрос. Это возможно, однако, с помощью следующей функции, которая вернет вам начало и конец выделения (одинаковые в случае каретки) внутри
<textarea>
или текста<input>
.Обратите внимание, что текстовая область должна иметь фокус для правильной работы этой функции в IE. Если вы сомневаетесь,
focus()
сначала вызовите метод textarea .источник
range && range.parentElement() == el
есть, чтобы проверить, находится ли выбор в текстовой области и необходим ли он. Нет проблем с функцией получения позиции каретки, если текстовая область находится в фокусе . Если вы не уверены, вызовите метод textareafocus()
перед вызовомgetInputSelection()
. Я добавлю примечание к ответу.mousedown
события или добавлениеunselectable="on"
к<div>
элементу.Я изменил вышеупомянутую функцию, чтобы учесть возврат каретки в IE. Это не проверено, но я сделал что-то похожее в своем коде, поэтому оно должно быть работоспособным.
источник
Если вам не нужно поддерживать IE, вы можете использовать
selectionStart
иselectionEnd
атрибутыtextarea
.Чтобы получить позицию каретки просто используйте
selectionStart
:Чтобы получить строки, окружающие выделение, используйте следующий код:
Демо на JSFiddle .
Смотрите также HTMLTextAreaElement docs .
источник