Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   Opera, FireFox, Chrome - проблема с получение HTML выдеенно фрагмента (https://javascript.ru/forum/css-html-firefox-mizilla/15188-opera-firefox-chrome-problema-s-poluchenie-html-vydeenno-fragmenta.html)

Frozen Coyote 16.02.2011 12:48

Opera, FireFox, Chrome - проблема с получение HTML выдеенно фрагмента
 
Добрый день,

сражаюсь с проблемой - никак не получается справиться - помогите кто может

Для начала прошу открыть ссылку - это мой wysiwyg, точнее его часть

Описание проблемы:

Открываем ИЕ. В нем открываем редактор, выделяем ссылочку (четко по ее границам), нажимаем ТЕСТ и в алерте получаем HTML всей ссылки. Это то что надо, великолепно.

Теперь открываем Хрому или Оперу - не суть. В ней открываем редактор, выделяем ссылочку (четко по ее границам), нажимаем ТЕСТ и в алерте получаем СОВСЕМ НЕ ТО ЧТО НУЖНО - только текст, без HTML. А вот если мы выделим ссылку + еще один (или больше) символов (неважно с какой стороны - слева, справа) - получаем то что нужно - в алерте отображается весь HTML ссылки

ПОЧЕМУ ТАК, друзья? Я уже голову свернул ((( Ниже код функции

function getMyHtmlSelection(iframe_id)
	{
		var iframe = document.getElementById(iframe_id);
		var idoc = iframe.contentDocument || iframe.contentWindow.document; // ie compatibility
		var txt = '';

		//MOZILLA
		if(idoc.getSelection)
		{
	        var select = iframe.contentWindow.getSelection();
	        var range = select.getRangeAt(0);
	        var tempel = document.createElement('div');
	        tempel.appendChild(range.cloneContents());
	        var txt = tempel.innerHTML;
		}
        //IE
		if(idoc.selection)
		{
	    	txt = idoc.selection.createRange().htmlText;
	    }

		alert(txt);
	}

glober 24.02.2011 15:43

Привет!
Судя по вопросу до рабочего визивига еще далеко. А судя по отсутствию ответов понятно, что не многие так "глубоко копают" JavaScript.

Если перед получением выделенного фрагмента Вставить такой код:

range.selectNode(range.commonAncestorContainer.parentNode);


Тогда при выделении текста от начала до конца какого либо тега получим текст вместе с его контейнером т.е. обрамленный тегами.

Правда если выделить несколько узлов, получим их общего родителя, возможны варианты получить все вместе с тегом <body>, по этому нужно хорошо продумать алгоритм.

Если есть другие варианты буду рад увидеть.


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