Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Поиск и замена в текстовом поле (https://javascript.ru/forum/events/8914-poisk-i-zamena-v-tekstovom-pole.html)

Roman Koff 20.04.2010 15:50

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

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

function setFind(h) {
	var f = prompt("Enter text to search:");
	h.selection ... 
}

micscr 20.04.2010 20:23

Насколько мне известно, текущую позицию курсора нельзя определить.

Octane 20.04.2010 20:48

Цитата:

Сообщение от micscr
Насколько мне известно, текущую позицию курсора нельзя определить.

Как же тогда редактор BB-кодов работает, например, на этом форуме?

http://fastcoder.org/articles/?aid=609
Для W3C-браузеров textarea.selectionStart, для IE чуть посложнее, нужно получить TextRange и сдвинуть его левую границу к началу textarea, затем получить textrange.text.length

micscr 21.04.2010 10:34

Странно. Я раньше вроде спрашивал такое и из ответа понял, что так работает только если есть выделение.:blink:

Octane 21.04.2010 22:16

Курсор (каретка) рассматривается, как схлопнутое выделение, то есть его границы совпадают.

x-yuri 21.04.2010 22:18

Цитата:

Сообщение от Octane
сдвинуть его левую границу к началу textarea

Octane, в смысле createTextRange для textarea и setEndPoint для первого TextRange?

Octane 21.04.2010 22:59

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

x-yuri 22.04.2010 00:57

да я так, уточнить хотел на предмет другого варианта. Я делал так:
if( window.getSelection ) {
	return el.selectionStart;
} else {
	var cursor = document.selection.createRange();
	var range = el.createTextRange();
	range.setEndPoint( 'EndToStart', cursor );
	return range.text.length;
}

Octane 22.04.2010 08:06

Разве это работает? Я помню, что созданные разным способом textrange никак не хотели конечные точки друг друга принимать.

x-yuri 22.04.2010 10:20

Цитата:

Сообщение от Octane
Разве это работает?

хм, ты прав, не работает


Часовой пояс GMT +3, время: 03:32.