CKEditor: применить removeFormat на пасте

мне удалось настроить событие on paste для захвата HTML, вставленного в текстовую область по мере вставки.

Мне нужно автоматически применить команду removeFormat к этому HTML до или во время вставки в текстовую область, чтобы я мог очистить ее от классов, различных тегов и других атрибутов. Может ли кто-нибудь указать мне в правильном направлении, чтобы правильно применить команду removeFormat?

вот мой код так далеко:

$(function(){
        $('textarea').ckeditor(
            function( textarea ){
                var editor = this;
                editor.on('paste', function( e ) { 
                    //alert(e.data.html); // This shows the HTML
                    editor.execCommand( 'removeFormat', e.data.html ); // Doesn't seem to do anything, HTML is pasted with the attributes intact
                    });              
            }
        )
    });

спасибо!

P.S. опция Force plain text не жизнеспособна, поскольку есть некоторые HTML-элементы, которые я хочу сохранить (p,table и другие).

3 ответов


вам нужно выбрать содержимое, прежде чем вы сможете применить removeFormat к нему.

вы можете попробовать захватить диапазон (даже если это просто курсор, сидящий в точке вставки ) и сохранить закладку перед вставкой.

после вставки, используйте закладки, чтобы снова выбрать этот диапазон.

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

затем вы можете использовать removeFormat:

editor.execCommand( 'removeFormat', editor.selection );

здесь есть ссылки на страницы API диапазона и выбора:

http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dom.range.html

http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dom.selection.html

Я нашел, что легче работать с диапазонами, метод createBookmark хорош, потому что он устанавливает маркеры, и вы можете захватить правильные начальные и конечные точки, даже если DOM изменяется ( как это будет при вставке в новом содержании ). Вы можете использовать moveToBookmark() после вставки, чтобы выбрать диапазон.

http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dom.range.html#createBookmark

поскольку документация разрежена, я нашел полезным поиск исходного кода для мест, где вызываются методы. Глядя на то, как они используются, я лучше понимаю, к какому объекту мне нужно применить методы.

Быть Хорошо, Джо!--2-->


можно использовать

config.forcePasteAsPlainText = true;

cf http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html


начиная с CKEditor 4.1 нет необходимости выполнять пользовательское кодирование для определения списка элементов, которые должны храниться при вставке данных в CKEditor,Расширенный Фильтр Содержимого следует сделать трюк.

либо оставьте ACF включенным с конфигурацией по умолчанию-CKEditor примет все теги, которые могут быть созданы с ним, или определите свой собственный набор правил с более или менее строгим набором разрешенных тегов/атрибутов/стилей. См.документация