Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   получить HTML-код выделенного фрагмента (https://javascript.ru/forum/events/21479-poluchit-html-kod-vydelennogo-fragmenta.html)

evgh 11.09.2011 20:42

получить HTML-код выделенного фрагмента
 
для IE6 нашёл ответ: document.selection.createRange().htmlText;
для остальных нашёл window.getSelection().getRangeAt(0).toString(); но возвращает текст без тегов.

подскажите :cray:
________
пробовал такой код:
var range = window.getSelection().getRangeAt(0);
var e = document.createElement('span');
e.appendChild(range.cloneContents());
alert(e.innerHTML);

но достаёт теги только если кроме слова выделить и пробел, подскажите как сделать аналог "IE-го кода"

p.s. решение нужно без использования библиотек

Riim 12.09.2011 01:35

Без учета текстовых полей (из-за FF так и не получилось с их учетом сделать):

if (window.getSelection) {
	var elem = document.createElement('div'), sel = getSelection(), i = 0, l = sel.rangeCount;
	while (i < l) {
		elem.appendChild(sel.getRangeAt(i++).cloneContents());
	}
	return elem.innerHTML;
}
return document.selection.createRange().htmlText;

evgh 12.09.2011 14:47

неужели нерешаемо?

Riim 12.09.2011 15:06

Решаемо и для FF, но там через Ж получается.
evgh, тебе обязательно с текстовыми полями нужно? Зачем?

evgh 12.09.2011 15:29

делаю подобие WYSIWYG, и если учесть что без айфрэймов (а почти все, если не все WYSIWYG на айфрэймах), то вариант через Ж подходит :yes:

хочу определять что за теги снаружи текста, и если (к примеру) <b></b> , а я хочу ещё и курсив, то убирать <b> и ставить <span style="font-weight: 600;font-style:italic;"> (тоже к примеру)

p.s. если идея и хреновенькая, то убеждать меня в этом не надо, просто помогите кодом

Riim 12.09.2011 15:37

Цитата:

Сообщение от evgh
и если (к примеру) <b></b>

Цитата:

Сообщение от evgh
<span style="font-weight: 600;font-style:italic;">

под текстовыми полями я имел ввиду input и textarea.

evgh 12.09.2011 15:52

Цитата:

Сообщение от Riim (Сообщение 126119)
под текстовыми полями я имел ввиду input и textarea.

пардон

я в div-е ковыряюсь (contenteditable="true")

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

evgh 15.09.2011 22:17

Неужели ни у кого нет идей :help: , или может знаете ещё куда (форумы) обратиться за советом?


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