CKEditor удаляет атрибут класса из таблицы
В моем <textarea>
у меня есть этот текст:
<table class='table table-striped'>
<tr>
<td>1</td>
<td>2</td>
</tr>
</table>
После использования CKEDITOR.replace()
моя текстовая область станет CKEditor, и в ней есть таблица. Проблема заключается в том, что CKEditor добавляет свой класс в мою таблицу под названием cke_show_border
. Только атрибуты в этом классе применяются к таблице, ни один из моих классов не применяется.
Что мне делать, чтобы применить его к классу table
и table-striped
?
Спасибо за вашу помощь.
Ответы
Ответ 1
У меня была аналогичная проблема, когда открытие и сохранение с помощью CKEditor 7.x.1.13 в Drupal 7 заключалось в удалении атрибутов в моих HTML-элементах. Добавив следующее в "Конфигурация пользовательского JavaScript", он исправил его.
config.allowedContent = true;
Ответ 2
Как я вижу здесь, скорее всего, вы используете CKEditor 4.1 или новее, и ваша проблема Advanced Content Filter. Я предполагаю, что в вашем диалоговом окне таблицы нет вкладки "Дополнительно", а также нет плагина dialogadvtab
в пакете редактора:
CKEDITOR.instances.yourInstance.plugins.dialogadvtab
> undefined
Правильно? Затем вам нужно настроить config.extraAllowedContent
:
config.extraAllowedContent = `table[class]`;
Почему это так, вы можете спросить? Это связано с тем, что в редакторе нет feature (команда, кнопка, диалог, поле и т.д.), Добавляющая классы к <table>
теги. Поэтому нет никакой функции, которая гласит:
"Эй, редактор, я собираюсь добавлять классы в таблицы, и вам должно быть здорово".
Фактически это делается путем определения allowedContent наряду с определением функции. Поэтому, если нет загруженного плагина dialogadvtab
, который бы сообщил редактору, что таблицы могут идти с классами, редактор отбрасывает class
атрибуты на выходе, поскольку они не поддерживаются какой-либо функцией.
Это поведение, чтобы ваша разметка была чистой и контролировала то, что создается редактором WYSIWYG. Тем не менее, это требует внимания и базового понимания.
См. мой предыдущий ответ на аналогичный вопрос: CKEditor автоматически разделяет классы из div
Ответ 3
Вы можете разрешить все: теги, классы, стили и атрибуты, установив
config.allowedContent = true;
Однако лучше всего разрешить только те функции, которые вам нужны, в дополнение к тому, что предоставляется с плагинами.
Чтобы разрешить прикрепление любого класса к таблице, введите
config.extraAllowedContent = 'table(*)';
Чтобы узнать больше о синтаксисе правил, перейдите сюда: http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules-section-string-format
Ответ 4
Я нашел решение.
Это отключает фильтрацию, она работает, но не очень хорошая идея...
config.allowedContent = true;
Для воспроизведения с помощью строки содержимого отлично подходит для id и т.д., но не для атрибутов класса и стиля, потому что у вас есть() и {} для фильтрации классов и стилей.
Итак, моя ставка заключается в том, чтобы разрешить любой класс в редакторе:
config.extraAllowedContent = '*(*)';
Это позволяет использовать любой класс и любой встроенный стиль.
config.extraAllowedContent = '*(*);*{*}';
Чтобы разрешить только class= "asdf1" и class= "asdf2" для любого тега:
config.extraAllowedContent = '*(asdf1,asdf2)';
(поэтому вам нужно указать имена классов)
Разрешить только class= "asdf" только для p-тега:
config.extraAllowedContent = 'p(asdf)';
Чтобы разрешить атрибут id для любого тега:
config.extraAllowedContent = '*[id]';
и т.д.
Чтобы разрешить тег стиля (< style type = "text/css" > ... </style> ):
config.extraAllowedContent = 'style';
Чтобы быть немного сложнее:
config.extraAllowedContent = 'span;ul;li;table;td;style;*[id];*(*);*{*}';
Надеюсь, это лучшее решение...
Ответ 5
Добавить border = 1 в таблицу и таким образом CKEditor не будет устанавливать свой собственный класс в таблице
(могут быть другие способы сделать это, но я всегда находил это проще, так как это не требует каких-либо изменений для CKEditor)
Ответ 6
Thsi - прекрасный пример использования версии CKeditor 4.0 и более поздней версии с нашим собственным стилем CSS.
<script src="//cdn.ckeditor.com/4.5.9/standard-all/ckeditor.js"></script>
var editor = CKEDITOR.replace("textarea", {
width: 750, height: 500, fullPage: true,
extraPlugins: 'stylesheetparser',
//// Do not load the default Styles configuration.
stylesSet: [],
on: {
instanceReady: function (evt) {
// Remove ckeditor table border
$("iframe").contents().find('body').removeClass('cke_show_borders');
}
}
});
Ответ 7
CKEditor удаляет стили, которые не находятся в файле styles.js. Чтобы CKEditor распознал класс и применил его к таблице, вам нужно добавить его в документ в /* Object Styles */.
{
name: 'Striped Table',
element: 'table',
attributes: { 'class': 'table table-striped'}
}
Даже если CKEditor пытается отключить его, вы можете выбрать таблицу, а затем выбрать свой стиль из раскрывающегося списка. Надеюсь, это поможет!