阻止CKEDITOR修改HTML

时间:2014-12-16 15:52:50

标签: javascript html5 ckeditor

我正试图强迫CKE停止修改我的HTML,并尝试引入我们自己的规则。

例如,CKE将删除空 span i 标记,我们可以阻止它使用

CKEDITOR.dtd.$removeEmpty.span = false
CKEDITOR.dtd.$removeEmpty.i = false

到目前为止一切顺利。然后我们尝试使 A 标签能够支持块级元素(HTML5),我们也可以通过操作DTD来完成。

但现在看来DTD对象还不足以满足我们的目标。 例如,它正在删除空 A 标记,我无法阻止它执行此操作,

CKEDITOR.dtd.$removeEmpty.a = false 

不会做的伎俩。它使用位于内容末尾的空 BR 标签做同样的事情。

我知道CKE正在使用过滤器,解析器,处理器或我需要挂钩并修改/修改它的东西,以阻止它进行这些更改。你能否就如何实现这一点给我任何建议?

亲切地,奥古斯丁。

更新

我也期待在 SELECT 标签中添加额外受支持的子项。选择支持optgroup和option作为子项,我正在尝试添加对custom_tag(内联)的支持,但我无法成功实现它。

CKEDITOR.dtd.select.custom_tag = 1

不是这样做的。自定义标记也在dtd。$ inline上声明 我想有一些外部处理清理它,我无法从DTD对象控制它。关于这方面的任何指针?

2 个答案:

答案 0 :(得分:2)

不幸的是,空链接是一种特殊情况,要停止删除它们,您需要修改源:

https://github.com/ckeditor/ckeditor-dev/blob/6f4c29002f4d6ecfa39308b641ae37c56bba1348/core/htmlparser/fragment.js#L59-L66

function isRemoveEmpty( node ) {
    // Keep marked element event if it is empty.
    if ( node.attributes[ 'data-cke-survive' ] )
        return false;

    // Empty link is to be removed when empty but not anchor. (#7894)
    return node.name == 'a' && node.attributes.href || CKEDITOR.dtd.$removeEmpty[ node.name    ];
}

顺便说一句。 CKEditor删除空内联元素,因为它们不可编辑(有些东西可能会开始工作不正常)。为了确保这些元素的正确可编辑性,您可以为它们编写widgets

答案 1 :(得分:2)

要在CKEditor中禁用过滤HTML(源代码),请在config.js文件中写入以下行:

CKEDITOR.editorConfig = function( config ) { config.allowedContent = true; };

Source code here