У меня есть страница с множеством текстовых полей. Когда кто-то нажимает на ссылку, я хочу, чтобы слово или два были вставлены туда, где находится курсор, или добавлены к текстовому полю с фокусом.
Например, если курсор / фокус находится на текстовом поле с надписью «яблоко», и он щелкает ссылку с надписью «[электронная почта]», то я хочу, чтобы текстовое поле показывало «яблоко bob@example.com».
Как я могу это сделать? Возможно ли это вообще, так как что, если фокус находится на элементе radio / dropdown / non textbox? Можно ли запомнить последнее сосредоточенное на текстовом поле?
javascript
jquery
Нажмите Upvote
источник
источник
Ответы:
Используйте это отсюда :
источник
areaId
?function deleteTxt() { var ele = document.getElementById('yourTextarea'); var text = ele.value; text = text.slice(0, ele.selectionStart) + text.slice(ele.selectionEnd); ele.value = text; return text; }
Может быть, более короткая версия, было бы легче понять?
Я написал это в ответ на Как добавить текст в текстовое поле с текущей позиции указателя с помощью jquery?
источник
document.getElementById("txt").selectionStart = caretPos + txtToAdd.length
.Одобренный ответ Джорджа Клагхорна отлично подошел для простой вставки текста в позиции курсора. Если пользователь выбрал текст, и вы хотите, чтобы этот текст был заменен (по умолчанию используется большинство текста), вам нужно внести небольшое изменение при установке переменной 'back'.
Кроме того, если вам не нужно поддерживать более старые версии IE, современные версии поддерживают textarea.selectionStart, так что вы можете убрать все обнаружение браузера и специфический для IE код.
Вот упрощенная версия, которая работает как минимум для Chrome и IE11 и обрабатывает замену выделенного текста.
источник
maxlength
, поэтому результирующее значение после вставки может быть длиннее максимального.Код выше не работал для меня в IE. Вот код, основанный на этом ответе .
Я вынул,
getElementById
чтобы я мог ссылаться на элемент по-другому.РЕДАКТИРОВАТЬ: Добавлен работающий фрагмент, jQuery не используется .
источник
element.focus()
является законным методом JavaScript для DOMElements: w3schools.com/jsref/met_html_focus.aspиспользуя ответ @quick_sliv:
источник
Как вставить текст в текущую позицию курсора TextBox через JQuery и JavaScript
Обработать
Здесь у меня есть 2 текстовых поля и кнопка. Я должен нажать на определенную позицию в текстовом поле, а затем нажать на кнопку, чтобы вставить текст из другого текстового поля в положение предыдущего текстового поля.
Основная проблема здесь заключается в том, чтобы получить текущую позицию курсора, куда мы будем вставлять текст.
источник
Добавление текста в текущую позицию курсора состоит из двух шагов:
Демо: https://codepen.io/anon/pen/qZXmgN
Протестировано в Chrome 48, Firefox 45, IE 11 и Edge 25
JS:
HTML:
источник
Я думаю, что вы могли бы использовать следующий JavaScript для отслеживания последнего текстового поля:
Использование:
Предыдущее решение (props to gclaghorn) использует textarea и рассчитывает положение курсора, так что это может быть лучше для того, что вы хотите. С другой стороны, этот будет более легким, если это то, что вы ищете.
источник
Принятый ответ не работал для меня в Internet Explorer 9. Я проверил его, и обнаружение браузера не работает должным образом, он обнаружил ff (firefox), когда я был в Internet Explorer.
Я только что сделал это изменение:
Вместо того:
В результате получается следующий код:
источник
Этот плагин JQuery дает вам готовый способ выбора / манипулирования кареткой.
источник
Вы можете только сфокусировать нужное текстовое поле и вставить туда текст. нет никакого способа узнать, где фокус AFAIK (возможно, взаимодействующий по всем узлам DOM?).
проверьте этот стекопоток - у него есть решение: как узнать, какой элемент DOM находится в фокусе?
источник
Редактирование содержимого, выбор HTML или любого другого элемента DOM
Если вы пытаетесь вставить курсор в a
<div contenteditable="true">
, это становится намного сложнее, особенно если в редактируемом контейнере есть дочерние элементы.Мне очень повезло с использованием библиотеки Rangy :
Он имеет массу замечательных функций, таких как:
Онлайн-демонстрация не работала, когда я проверял последний раз, однако в репозитории есть рабочие демонстрации. Для начала просто загрузите репо из Git или NPM, а затем откройте ./rangy/demos/index.html
Это делает работу с Paret Pos и выбор текста на одном дыхании!
источник
Ответ на этот вопрос был опубликован так давно, и я наткнулся на него с помощью поиска Google. HTML5 предоставляет API HTMLInputElement , который включает в setRangeText () метод, который заменяет диапазон текста в
<input>
или<textarea>
элемент с новой строки:Вышеуказанное заменит выбор, сделанный внутри,
element
наabc
. Вы также можете указать, какую часть входного значения заменить:Вышеуказанное заменило бы 4-6-й символы входного значения на
abc
. Вы также можете указать, как должен быть установлен выбор после замены текста, указав одну из следующих строк в качестве 4-го параметра:'preserve'
попытки сохранить выбор. Это по умолчанию.'select'
выбирает вновь вставленный текст.'start'
перемещает выделение непосредственно перед вставленным текстом.'end'
перемещает выделение сразу после вставленного текста.Совместимость браузера
Страница MDN для setRangeText не предоставляет данные о совместимости браузера, но я думаю, что это будет то же самое, что и HTMLInputElement.setSelectionRange () , который в основном является всеми современными браузерами, IE 9 и выше, Edge 12 и выше.
источник