Як отримати виділену частину HTML коду в ckeditor - Все про web розробку на
При написанні плагінів для ckeditor'а часто виникає завдання: необхідно отримати виділену користувачем інформацію, а в деяких випадках зробити маніпуляцію з нею. Якщо необхідний виділений текст, то тут все просто. Об'єкт editor має метод getSelection(), він повертає об'єкт, який крім повної інформації про виділений текст містить ще метод getSelectedText(). У найпростішому випадку в плагіні це виглядало б так:
Сподіваюся Вам зрозуміло, що плагін не працюватиме. Це є псевдокод. При ініціалізації плагіна, жодного тексту не виділено.
А як щодо html коду, для роботи необхідний саме він.
Беремо виділену частину HTML коду у вигляді HTMLFragment. У API ckeditor'а є своя кросбраузерна надбудова над цим об'єктом. Далі якщо це Internet Explorer, то він має поле htmlText у об'єкта типу range. При цьому - це «нативний» range, який не повертає метод selection.getRanges().
Якщо це не Internet Explorer, а будь-який інший браузер, то використовуються методи копіювання фрагмента коду cloneContents, потім цей фрагмент закидається в div, і вже у нього береться внутрішній вміст. Ось такі милиці. Підлога Інтернету на цьому працює, скажу я Вам.
Не єдиний спосіб отримати вміст виділеного фрагмента. Наведу ще одну реалізацію:
selection.getRanges()[ 0 ] - якщо комусь не зрозуміло, то за деякою логікою (у деяких браузерах), при натисканні ctrl, можна перенести курсор в інше місце, і виділити там іншу частину сторінки та отримати кілька виділень. Цього нам не треба, скільки я не пробував, повторити таке мені не вдалося. Так що беремо тільки найперше.
bookmarks = selection.createBookmarks()- наскільки я зрозумів,необхідно для плагінів undo та redo. Якщо Ви раптом якимось містичним чином змогли змінити html код у сторінці, то плагін undo допоможе Вам повернути все на місце.
. Але не захопивши відкриває. Як себе повинна поводитись заміна, відомо напевно тільки Всевишньому.
Максимум, який мені вдалося досягти – це метод editor.insertHtml('html').
У звичайному випадку метод просто вставляє в сторінку код, але якщо частина сторінки виділено, то метод зробить її заміну. Працює це все, м'яко кажучи дивно. Я б сказав, що в складносурядних сторінках, з таблицями, воно працює не так, як хотілося б.