Получение выделения в Opera

lucas

Guest
Получение выделения в Opera

[::оговорка::] Каюсь, в JavaScript я не силен.

В форуме цитирование текста сообщений и выделение текста жирным/курсивом реализовано при помощи следующей функции (где browser_* -- логические переменные, устанавливаемые для соотв. браузеров).

Код:
function get_selection()
{	if (browser_ie) { return(document.selection.createRange().text) ; }

	if (browser_mozilla)
	{	var element = document.new_post.text ;

		if (element.selectionStart < element.selectionEnd)
		{ return(element.value.substr(element.selectionStart,element.selectionEnd)) ; }
		else { return(window.getSelection()) ; }
	}

	return('') ;
}
Она работает прекрасно в IE и Mozilla Firefox, но отказывается что либо делать в Opera (7.23 на Windows XP).

Опытным путем установлено, что Opera не знает document.selection (IE only?), но понимает window.document.getSelection (deprecated в Mozilla), например, при таком запросе в адресной строке -- javascript:alert(window.document.getSelection()). Однако, при клике по ссылке выделение снимается, и, следовательно, возвращается пустая строка.

Вопрос: каким образом можно получить содержание выделения в Opera после клика по ссылке и возможно ли это вообще?

Заранее спасибо за любые предложения.
 

tony2001

TeaM PHPClub
>возможно ли это вообще?
нет
к сожалению, Опера снимает выделение после клика, до того, как срабатывает функция.
 

HEm

Сетевой бобер
заноси значение в промежуточную переменную
 

lucas

Guest
tony2001, HEm

Большое спасибо.

Проблема наполовину решилась таким кодом:

1. <body onmouseup='if (window.document.getSelection()) { buffer = window.document.getSelection() ; }'>
2. function get_selection() { if (browser_opera) { return(buffer) ; } ...

Это позволяет цитировать текст на странице. Но, по-прежнему, невозможно обрамить текст тегами в тектовом поле.

Opera (как и Mozilla) не считает выделением текст, выделенный в textarea/input[type='text'], но (НЕ как Mozilla) не поддерживает textarea.selectionStart/End.

Существует ли способ распознать выделение в textarea/input[type='text'] в Opera? Существует ли аналог свойств selection*?
 

HEm

Сетевой бобер
думаю, что нет
погугли попробуй, с первых 10 ссылок на "opera selection" наверняка поймешь, можно это сделать или нет
 

lucas

Guest
Гуглил я раньше. С нулевым результатом.
Сейчас решил почитать форум Opera'ы/поискать по нему.

Результаты говорят сами за себя:

http://my.opera.com/forums/showthread.php?threadid=52560&highlight=selection

How to retrieve selection or caret position?

In Mozilla I can use the DOM2 Traversal/Range interfaces to retrieve selection, change selection, remove or edit selected text from JavaScript. For IE there are similar stuff but of course incompatible with the standard Traversal/Range; however the idea is that using the MSIE proprietary TextRange object one can get to the same results. For Opera I have found no solution to this problem, and there are situations where it would be very useful.
http://my.opera.com/forums/showthread.php?threadid=48186&highlight=selection

It is a pity that Opera does not offer a way to manipulate the user selection, since I belive this would make Opera the preferred browser in many publishing environments.
P. S.: [ ..шутник, млин...]
 

HEm

Сетевой бобер
не надо меня жалеть, я не страдаю от неполадок с этим селекшном, удобство пользования этим браузером для меня значительно превышает любые неудобства с джаваскрыптами
 

lucas

Guest
HEm

Это была шутка. (Там смайлик.)
Вижу, что неудачная.
Прошу прощения.

В любом случае, огромное спасибо за помощь.
 
Сверху