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 примет все теги, которые могут быть созданы с ним, или определите свой собственный набор правил с более или менее строгим набором разрешенных тегов/атрибутов/стилей. См.документация