Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.04.2010, 15:50
Аватар для Roman Koff
Аспирант
Отправить личное сообщение для Roman Koff Посмотреть профиль Найти все сообщения от Roman Koff
 
Регистрация: 14.04.2010
Сообщений: 40

Поиск и замена в текстовом поле
Есть объект текстового поля (textarea) и переменная со строкой поиска.
Как осуществить поиск с текущей позиции курсора в текстовом поле до конца? Результатом поиска будет выделение первого найденного входжения строки поиска в текстовом поле...

В каком направлении копать?

function setFind(h) {
	var f = prompt("Enter text to search:");
	h.selection ... 
}
Ответить с цитированием
  #2 (permalink)  
Старый 20.04.2010, 20:23
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,351

Насколько мне известно, текущую позицию курсора нельзя определить.
Ответить с цитированием
  #3 (permalink)  
Старый 20.04.2010, 20:48
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,871

Сообщение от micscr
Насколько мне известно, текущую позицию курсора нельзя определить.
Как же тогда редактор BB-кодов работает, например, на этом форуме?

http://fastcoder.org/articles/?aid=609
Для W3C-браузеров textarea.selectionStart, для IE чуть посложнее, нужно получить TextRange и сдвинуть его левую границу к началу textarea, затем получить textrange.text.length
Ответить с цитированием
  #4 (permalink)  
Старый 21.04.2010, 10:34
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,351

Странно. Я раньше вроде спрашивал такое и из ответа понял, что так работает только если есть выделение.
Ответить с цитированием
  #5 (permalink)  
Старый 21.04.2010, 22:16
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,871

Курсор (каретка) рассматривается, как схлопнутое выделение, то есть его границы совпадают.
Ответить с цитированием
  #6 (permalink)  
Старый 21.04.2010, 22:18
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Octane
сдвинуть его левую границу к началу textarea
Octane, в смысле createTextRange для textarea и setEndPoint для первого TextRange?
Ответить с цитированием
  #7 (permalink)  
Старый 21.04.2010, 22:59
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,871

<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>

Последний раз редактировалось Octane, 21.04.2010 в 23:15.
Ответить с цитированием
  #8 (permalink)  
Старый 22.04.2010, 00:57
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

да я так, уточнить хотел на предмет другого варианта. Я делал так:
if( window.getSelection ) {
	return el.selectionStart;
} else {
	var cursor = document.selection.createRange();
	var range = el.createTextRange();
	range.setEndPoint( 'EndToStart', cursor );
	return range.text.length;
}
Ответить с цитированием
  #9 (permalink)  
Старый 22.04.2010, 08:06
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,871

Разве это работает? Я помню, что созданные разным способом textrange никак не хотели конечные точки друг друга принимать.
Ответить с цитированием
  #10 (permalink)  
Старый 22.04.2010, 10:20
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Octane
Разве это работает?
хм, ты прав, не работает
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить координаты курсора в текстовом поле в пикселях prike Events/DOM/Window 4 23.05.2013 04:35
Выделение текста в текстовом поле. Как снять выделение с пробела вконце? Roman Koff Events/DOM/Window 10 01.07.2010 16:48
Вставка подстроки в строку в текстовом поле на позицию курсора mastajedi Элементы интерфейса 3 10.11.2009 15:16
Enter в текстовом поле unkis Общие вопросы Javascript 4 07.07.2009 13:31
вывод нужного текста в текстовом поле при нажатии на кнопку! fifo4ka Общие вопросы Javascript 7 06.05.2008 13:36