Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обработка выделенного текста (https://javascript.ru/forum/events/44607-obrabotka-vydelennogo-teksta.html)

SeaGull 26.01.2014 06:34

Обработка выделенного текста
 
Добрый день.

На странице имеется текст с картинками. Пользователь выделяет текст, нажимает кнопку, и скрипт обрабатывает выделенное.

При обработке выделения через window.getSelection() в получаемом блоке присутствует только голый текст, и полностью отсутствует какая-либо информация о попавших в выделение изображениях.

Подскажите пожалуйста, как захватить текст вместе с информацией о присутствующих в нем изображениях ?

Спасибо.

Яростный Меч 26.01.2014 14:14

Цитата:

Сообщение от SeaGull
как захватить текст вместе с информацией о присутствующих в нем изображениях ?

window.getSelection().getRangeAt(0).cloneContents( ) - заселекченный кусок в виде documentFragment - можно смотреть его чилды.

для старых IE:
document.selection.createRange().htmlText - заселекченное в виде html-текста, если оное вставить в div - дальше можно смотреть его чилды.


всякие там проверки на нулл и try/catch добавь сам по настроению.

http://habrahabr.ru/post/55922/

SeaGull 26.01.2014 21:29

Цитата:

Сообщение от Яростный Меч
window.getSelection().getRangeAt(0).cloneContents( ) - заселекченный кусок в виде documentFragment - можно смотреть его чилды.


Спасибо.
Но там только список child'ов, без информации где именно в тексте они находились. Т.е. исходный HTML-код выделения по этой информации восстановить не удастся.

Перечитал свой исходный текст. Прошу прощения, видимо я некорректно выразился. На выходе нужен именно HTML-код выделенного блока.

Грубый пример для наглядности: на форуме есть сообщение с графическими смайликами. Пользователь выделяет часть текста и жмет "Цитировать". В цитату выделенный текст также должен попасть со смайликами.

Яростный Меч 26.01.2014 22:24

Цитата:

Сообщение от SeaGull
Перечитал свой исходный текст. Прошу прощения, видимо я некорректно выразился. На выходе нужен именно HTML-код выделенного блока.

...cloneContents(), как уже говорилось, создает documentFragment.

для html-текста надо сделать так:
var df = window.getSelection().getRangeAt(0).cloneContents();
var div = document.createElement("div");
div.appendChild(df);
var html = div.innerHTML; // истина тут


------
у тебя WYSIWYG-редактор что ли? я подобное делал для конвертации в bb-код, там с чилдами проще было намного.

SeaGull 27.01.2014 05:56

Огромное спасибо.
Всё работает.

Задача там действительно очень сходна к конвертации смайликов в bb-коды.
Сделал по Вашему примеру, потом таки переделал с перебором child'ов.


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