CKEditor自动去除div中的类
我在我的网站上使用CKEditor作为后端编辑器。 它正在推动我转弯,虽然它似乎想要改变代码,以便它看起来适合每当我按源button。 例如,如果我点击源并创build一个<div>
…
<div class="myclass">some content</div>
那么没有明显的理由剥离从<div>
的类,所以当我再次击中源已更改为…
<div>some content</div>
我认为这个恼人的行为可以在config.js
closures,但是我一直在挖掘,找不到任何文档来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)';
或者,您可以为dt
和dd
元素指定具有可选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允许的内容规则