Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.02.2009, 12:43
Аспирант
Отправить личное сообщение для mister_maxim Посмотреть профиль Найти все сообщения от mister_maxim
 
Регистрация: 09.02.2009
Сообщений: 57

несколько execCommand в Opera
Здравствуйте, кто-нибудь знает как в Опере применить форматирование текста по нескольким парметрам сразу? Например вот так подряд:
Код:
oifr.document.execCommand("FontSize",false,"7");
oifr.document.execCommand("ForeColor",false,"#ff0000");
не срабатывает в Опере ни какое форматирование: ни шрифт большим не становится ни цвет красным. По отдельности работает, например еси какую-либо из этих двух строчек закоментировать. Еще работает только установка большого размера текста если между этими двумя строками поставить программную имитацию нажатия кнопки:
Код:
oifr.document.execCommand("FontSize",false,"7");
oifr.document.keydown();
oifr.document.execCommand("ForeColor",false,"#ff0000");
задержка по времени не помогает. а строка между ними как я понимаю просто аннулирует действие последующей команды в Опере, ровно как и сама команда execCommand ни себе выполниться не дает ни последующим.

Выход пока вижу один.. после каждого применения параметра форматирования ставить программно один символ, после завершения всех параметров по которым надо отформатировать удалить весь образованный вспомогательный текст из этих символов и сохранить при этом достигнутое мультиформатирование. Только как это конкретно сделать, какими конкретными командами...?
Ответить с цитированием
  #2 (permalink)  
Старый 26.02.2009, 17:59
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

Это wysiwyg форма? Лучше не опираться на execCommand, а работать с выделением и "оборачивать" элементы через DOM.
Ответить с цитированием
  #3 (permalink)  
Старый 01.03.2009, 00:28
Аспирант
Отправить личное сообщение для mister_maxim Посмотреть профиль Найти все сообщения от mister_maxim
 
Регистрация: 09.02.2009
Сообщений: 57

Цитата:
Лучше не опираться на execCommand, а работать с выделением и "оборачивать" элементы через DOM.
понятно, но прочитав инфу по объекту Range я ужаснулся.. как все там интуитивно не понятно.. ну не въехал я в его функциональную полноту, например как там узнать самое элементарное - совпадают ли конечная и начальная точка области - с этим больше всего намучился.
Но после постоянных пыток-попыток я достиг в опере довольно неплохого(во всяком случае для себя приемлемого, однако не идеального) решения:
execCommand=function(win,command, val)
{		
		if($.browser.opera){
			var s=win.getSelection();
	                var r=s.getRangeAt(0);
	           if(r.cloneContents().textContent=="")								
			{
	       	 	var n = win.document.createElement('span');
				n.innerHTML = ' ';
				n.id="cursor";
	       	 	r.insertNode(n);
	       	 	s.removeAllRanges();
				s.addRange(r);
			};
		};
		win.document.execCommand(command,false,val);
};

это надстройка над уже существующим методом execCommand
($ - знак объекта jQuery если кто не знает)
далее. а в обработчиках нажатии кнопок и установки курсора мышкой, т.е. в методах $(doc).mousedown, $(doc).mouseup и $(doc).keydown
удалять искусственный курсор:
var el = $("#cursor",doc);
    	if(el.html() == ' ')
		{
			el.remove();
		}else{
			el.removeAttr('id');
		};

конечно хотелось бы чтобы при приемении форматирования к пустому курсору(не выделению) не появлялся бы на глаза выделяемый прямоугольничек.. ,как не пробывал его удалить с глаз - без него нельзя, но это уже мелочь, замечу что в казалось бы продвинутом tiny редакторе данная проблема вообще не решается.. и там не устранен глюк с мультиформатированием в опере.
Вообщем правило для Оперы как я понял таково - мультиформатирование можно применять только к непустой области выделения(не к курсору).
Ответить с цитированием
  #4 (permalink)  
Старый 01.03.2009, 03:16
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

mister_maxim,
В работе с выделением и с клавиатурным вводом в браузере Опера - сплошные проблемы.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Dojo и Opera Idb Dojo toolkit 4 25.06.2009 09:43
opera mobile demi Opera, Safari и др. 4 11.02.2009 11:22
Как сделать find() в Opera? romix Events/DOM/Window 0 31.08.2008 15:46
Сайт стал чудовищно отображаться на Opera barbiturat Сайт Javascript.ru 5 21.06.2008 05:55
Не возвращается XML-ответ в Opera после AJAX-запроса Yojik Общие вопросы Javascript 4 17.03.2008 05:56