CKEditor 4.x:禁止另一个标签

时间:2015-03-07 15:40:37

标签: ckeditor ckeditor4.x

我最近开始使用CKEditor 4.x,但我希望用户只能使用一组非常有限的标签。此外,并非所有标签组合都有用。

我目前只允许使用这些标签/格式:

<p>, <h3>, <ul>, <ol>, <li>, <strong>, <em> (and maybe some more)

我只需要,列表是针对普通样式而不是标题制作的。但绝对有可能在列表元素中创建标题。结果看起来很有趣,但没用。列表(点或编号)的样式为普通文本,但标题文本类似标题(不同的字体,不同的字体大小,不同的颜色)。

我想禁止这个。我还发现,在某些情况下,CKEditor还会将<p>标记放入列表中,这也是我不想要的。我想,主要是当我将列表中的标题更改回正常时,CKEditor只是将标题标记更改为<p>

是否有可能阻止CKEditor 4这样做?我看到,有一张关于CKEditor 3的类似问题的票:

http://dev.ckeditor.com/ticket/6849

但是由于CKEditor 4似乎是一个重写,所以解决方案似乎不适用(它已经被修复了)。

有谁知道,我怎么能阻止这个?为了更清楚:它不是关于粘贴文本或源编辑,我非常限制编辑器,窗格仅包含这些样式和撤消/重做。但是,通过常规命令,可以创建这种不需要的样式。

我想要的是:

<h3>A simple headline</h3>
<p>A simple paragraph</p>
<ul>
    <li>First text</li>
    ...
</ul>

想要的是:

<ul>
    <li><p>First text</p></li>
    ...

甚至:

<ul>
    <li><h3>First text</h3></li>
    ...

1 个答案:

答案 0 :(得分:3)

没有办法轻易实现这一目标。原因是有很多方法可以创建此内容。可以粘贴列表,可以在列表项中创建标题,可以在标题上创建列表,也许可以通过删除,拖放等操作来执行此操作。可以处理所有这些情况并阻止创建这些结构,但这将是很多工作。

相反,我认为你可以设置li>p, li>h3样式,使内部块在编辑器中不可见(没有边距,相同的字体大小)。然后,您还可以在显示该内容的页面上应用这些样式,或者在从编辑器中检索内容时清除内容。后者可以完成,例如以这种方式(见editor#toDataFormat event):

editor.on( 'toDataFormat', function( evt ) {
    var filter = new CKEDITOR.htmlParser.filter( {
        elements: {
            p: function( el ) {
                if ( el.parent && el.parent.name == 'li' ) {
                    delete el.name; // This removes the element and leaves its content.
                }
            }
        }
    } );

    filter.applyTo( evt.data.dataValue );
}, null, 12 );