Поиск и замена в текстовом поле
Есть объект текстового поля (textarea) и переменная со строкой поиска.
Как осуществить поиск с текущей позиции курсора в текстовом поле до конца? Результатом поиска будет выделение первого найденного входжения строки поиска в текстовом поле... В каком направлении копать? function setFind(h) { var f = prompt("Enter text to search:"); h.selection ... } |
Насколько мне известно, текущую позицию курсора нельзя определить.
|
Цитата:
http://fastcoder.org/articles/?aid=609 Для W3C-браузеров textarea.selectionStart, для IE чуть посложнее, нужно получить TextRange и сдвинуть его левую границу к началу textarea, затем получить textrange.text.length |
Странно. Я раньше вроде спрашивал такое и из ответа понял, что так работает только если есть выделение.:blink:
|
Курсор (каретка) рассматривается, как схлопнутое выделение, то есть его границы совпадают.
|
Цитата:
|
<html> <head> </head> <body> <h1>Только для IE</h1> <textarea id="textarea" rows="5" cols="20">123456789</textarea> <div>Позиция курсора: <span id="position">undefined</span></div> <script type="text/javascript"> var pos = document.getElementById("position"); document.getElementById("textarea").onkeyup = function () { var range1 = document.selection.createRange(); var range2 = range1.duplicate(); range2.moveToElementText(this); range2.setEndPoint("EndToStart", range1); pos.innerHTML = range2.text.length; }; </script> </body> </html> |
да я так, уточнить хотел на предмет другого варианта. Я делал так:
if( window.getSelection ) { return el.selectionStart; } else { var cursor = document.selection.createRange(); var range = el.createTextRange(); range.setEndPoint( 'EndToStart', cursor ); return range.text.length; } |
Разве это работает? Я помню, что созданные разным способом textrange никак не хотели конечные точки друг друга принимать.
|
Цитата:
|
Копаю сейчас markitup + simplemodal
Соотв. изящное решение могло бы выглядеть так: при нажатии на кнопку "Поиск" открывается модальное окно с текстовым полем и кнопкой "Искать далее". При нажатии на кнопку в родительском окне происходит выделение искомого текста, при повторном нажатии -- выделение следующего вхождения ... Так реализовано в CKEditor, но у меня "шариков" не хватает, исходники разобрать. |
CKEditor не с textarea работает, а с iframe, у которого document.designMode = "on". Вот поиск текста в HTML — действительно сложная задача, так как слова могут быть разбиты на несколько узлов. У вас, при использовании textarea, задача сильно упрощается, всего то текст с определенной позиции искать. Пример выделения найденного слова есть по ссылке, которую я давал в первом своем сообщении.
|
Спасибо, буду копать дальше...
|
Часовой пояс GMT +3, время: 02:40. |