CKEditor自动去除div中的类

我在我的网站上使用CKEditor作为后端编辑器。 它正在推动我转弯,虽然它似乎想要改变代码,以便它看起来适合每当我按源button。 例如,如果我点击源并创build一个<div>

 <div class="myclass">some content</div> 

那么没有明显的理由剥离从<div>的类,所以当我再次击中源已更改为…

 <div>some content</div> 

我认为这个恼人的行为可以在config.jsclosures,但是我一直在挖掘,找不到任何文档来closures它。

禁用内容过滤

最简单的解决scheme是去config.js和设置:

 config.allowedContent = true; 

请记住清除浏览器的caching )。 然后CKEditor停止过滤input的内容。 但是,这将完全禁用内容过滤 ,这是CKEditor最重要的function之一。

configuration内容过滤

您也可以更精确地configurationCKEditor的内容filter,以仅允许您需要的这些元素,类,样式和属性。 这个解决scheme要好得多,因为CKEditor仍然会删除浏览器在复制和粘贴内容时产生的大量糟糕的HTML,但是它不会去除你想要的内容。

例如,你可以扩展CKEditor的默认configuration来接受所有的div类:

 config.extraAllowedContent = 'div(*)'; 

或者一些Bootstrap的东西:

 config.extraAllowedContent = 'div(col-md-*,container-fluid,row)'; 

或者,您可以为dtdd元素指定具有可选dir属性的描述列表:

 config.extraAllowedContent = 'dl; dt dd[dir]'; 

这些只是非常基本的例子。 您可以编写所有types的规则 – 需要属性,类或样式,仅匹配特殊元素,匹配所有元素。 你也可以拒绝东西,完全重新定义CKEditor的规则。 阅读更多关于:

  • CKEditor中的内容过滤 – 为什么您需要内容filter。
  • 高级内容filter – 深入描述过滤机制。
  • 允许的内容规则 – 如何写入允许的内容规则。

我find了解决scheme。

这closures了过滤,它的工作,但不是一个好主意…

 config.allowedContent = true; 

使用内容string可以很好地适用于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];*(*);*{*}'; 

希望这是一个更好的解决scheme…

从CKEditor v4.1开始,你可以在CKEditor的config.js中做到这一点:

 CKEDITOR.editorConfig = function( config ) { config.extraAllowedContent = '*[id](*)'; // remove '[id]', if you don't want IDs for HTML tags } 

有关允许的内容规则的详细语法,请参阅官方文档

编辑 :这个答案是为那些在drupal中使用ckeditor模块的人。

我find了一个不需要修改ckeditor js文件的解决scheme。

这个答案是从这里复制的。 所有学分应该去原来的作者。

进入“pipe理>>configuration>> CKEditor”; 在configuration文件下,select您的configuration文件(例如完整)。

编辑该configuration文件,然后在“高级选项>>自定义JavaScriptconfiguration”中添加config.allowedContent = true;

在这里输入图像说明

不要忘记在“性能”选项卡下刷新caching。

如果你使用ckeditor 4.x,你可以试试

 config.allowedContent = true; 

如果你使用ckeditor 3.x,你可能会遇到这个问题 。

尝试把下面的行放在config.js中

 config.ignoreEmptyParagraph = false; 

请参阅官方的高级内容filter指南和插件集成教程 。

对于这个强大的function,你会发现更多的东西。 另请参阅config.extraAllowedContent ,它似乎适合您的需求。

这在ckeditor中被称为ACF(自动内容filter)。它将删除所有不正常标签的文本内容。在你的config.js文件中使用这个命令应该关掉这个ACK。

 config.allowedContent = true; 

如果您使用Drupal和CKEditor库中的“WYSIWYG”模块,那么下面的解决方法可能是一个解决scheme。 对我来说,它就像一个魅力。 我在Drupal 7.33中使用CKEditor 4.4.5和WYSIWYG 2.2。 我在这里find了这个解决方法: https : //www.drupal.org/node/1956778 。

这是它:我创build一个自定义模块,并将下面的代码放在“.module”文件中:

 <?php /** * Implements hook_wysiwyg_editor_settings_alter(). */ function MYMODULE_wysiwyg_editor_settings_alter(&$settings, $context) { if ($context['profile']->editor == 'ckeditor') { $settings['allowedContent'] = TRUE; } } ?> 

我希望这可以帮助其他Drupal用户。

我发现切换使用完整的HTML而不是过滤的HTML(在文本格式下拉框中的编辑器下面)是解决这个问题对我来说。 否则,风格会消失。

我想添加这个config.allowedContent = true; 需要被添加到ckeditor.config.js文件不是config.js,config.js没有为我做任何事情,但将其添加到ckeditor.config.js的顶部区域保持我的div类

另一个select,如果使用Drupal只是添加您想要使用的CSS样式。 这样它不会去掉样式或类名称。

所以在我的情况下在drupal 7的CSS选项卡中添加类似的东西

的Facebook = span.icon-facebook2

还要检查是否启用了字体样式button

以下是CKEDITOR 4.x的完整示例:

HTML

 <textarea name="post_content" id="post_content" class="form-control"></textarea> 

脚本

 CKEDITOR.replace('post_content', { allowedContent:true, }); 

上面的代码将允许编辑器中的所有标签。

更多详细信息: CK EDITOR允许的内容规则