我正在寻找一个避免使用CKEditor但也不会剥离之前插入到数据库中的任何<i>
标签的解决方案。
情况:
我使用CKEditor将HTML内容插入到数据库中,其中一些内容包含<i>
元素。
一切都很完美,内容显示在网页上。
但是当我想编辑以前插入的内容时,<i>
元素会消失。
在我的具体情况下,我使用:
<i class="fa-icon-fullscreen fa-icon-xxlarge main-color"></i>
当然,如果我禁用编辑器,在文本区域中显示的内容就会很好。我正在寻找一个避免使用CKEditor但也不会剥离之前插入到数据库中的任何<i>
标签的解决方案。
情况:
我使用CKEditor将HTML内容插入到数据库中,其中一些内容包含<i>
元素。
一切都很完美,内容显示在网页上。
但是当我想编辑以前插入的内容时,<i>
元素会消失。
在我的具体情况下,我使用:
<i class="fa-icon-fullscreen fa-icon-xxlarge main-color"></i>
当然,如果我禁用编辑器,在文本区域中显示的内容就会很好。当使用protectedSource方案时,i
标签不再被剥离,但是img
标签在CKEditor的所见即所得模式中不再显示(我正在使用4.3.1版)。对我而言,更好的解决方案是使用CKEDITOR.dtd.$removeEmpty
禁用删除空i
标签。
例如,我将以下内容添加到config.js文件中:
// allow i tags to be empty (for font awesome)
CKEDITOR.dtd.$removeEmpty['i'] = false;
注意:这应该放在 CKEDITOR.editorConfig = function (config)
函数的外部。我找到了解决我遇到的使用<i>
标签的特定问题的方法。
我从Drupal论坛得到的答案。
修复或调整(随你怎么称呼)的方法是将以下内容设置到 ckeditors config.js 文件中:
// ALLOW <i></i>
config.protectedSource.push(/<i[^>]*><\/i>/g);
感谢Spasticdonkey提供链接。
以下是我使用的方法:
按照相同的顺序在Drupal CKEditor配置文件设置admin/config/content/ckeditor/edit/Full中添加以下3行代码
高级选项 >> 自定义JavaScript配置
config.allowedContent = true;
config.extraAllowedContent = 'p(*)[*]{*};div(*)[*]{*};li(*)[*]{*};ul(*)[*]{*}';
CKEDITOR.dtd.$removeEmpty.i = 0;
第一行基本上是关闭高级过滤
第二行是允许p、div、li和ul标签中的所有类()、任何样式{}和任何属性[*]。
最后一行是针对空标签...这一行适用于图像...我发现,如果您使用 config.protectedSource.push(/]*></i>/g); 在编辑时会剥离掉空标签。
对于4.3版本的ckeditor
在config.js中(在配置部分之后)粘贴以下内容:
CKEDITOR.dtd.$removeEmpty['b'] = false;
编写带有代码的小部件
CKEDITOR.plugins.add( 'bwcaret', {
requires: ['widget'/*, 'richcombo'*/],
icons: 'bwcaret',
init: function( editor ) {
editor.widgets.add( 'bwcaret', {
button: 'Create a caret',
template: '<b class="caret"></b>',
allowedContent: 'b(!caret)',
requiredContent: 'b(!caret)',
upcast: function( element ) {
return element.name == 'b' && element.hasClass( 'caret' );
},
});
}
});
我找到了一个永久性的解决方案。实际上,CKEditor只会删除空标签。无论标签是什么,可能是标签或标签
如果您正在使用任何像Font-Awesome、Maeterlize等图标...
您可以在config.js
文件中使用以下代码停止它
CKEDITOR.dtd.$removeEmpty.span = false;
CKEDITOR.dtd.$removeEmpty.i = false;
如果您使用了更多的空白标签,那么您需要在$removeEmpty
后添加标签名称。
CKEditor 4会删除空标签,因此您可以在不更改任何配置设置的情况下进行技巧操作。
替换
<i class="fa-icon-fullscreen fa-icon-xxlarge main-color"></i>
With
<i class="fa-icon-fullscreen fa-icon-xxlarge main-color"> </i>
阅读有关高级内容过滤器的信息。CKEditor正在删除不允许的元素,但您可以扩展过滤器的规则。
但是,如果问题是CKEditor删除空的<i>
元素,则需要找到其他使用它的方法。CKEditor不是所见即所得的网站构建器。它是一个文档编辑器,因此加载的内容必须具有意义。空的内联元素没有任何意义,因此被删除,否则编辑器将不知道如何处理它。
在(近)将来的解决方案之一是使用小部件系统来处理这些空元素。但是现在我建议您检查CKEDITOR.htmlDataProcessor和简短指南如何使用它。