停止CKEDITOR将Previous Element类复制到页面上的每个新元素中

时间:2014-08-08 20:50:00

标签: javascript html ckeditor wysiwyg

默认情况下,当您点击回车键时光标所在的元素将与所有相同的属性重复。如果在CKEDITOR配置文件中设置“forceEnterMode:true”,则可以强制ckeditor不复制元素,而是在每次按Enter(http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.forceEnterMode)时使用默认元素,但不幸的是,类仍然被复制进入这个新元素。

换句话说,如果ckeditor中的代码是:

<div class="text">{{cursor here}}</div>

然后按两次Enter键。你会得到:

<div class="text"></div>
<div class="text">{{cursor here}}</div>

我然后设置forceEnterMode:true,然后按回车键,你会得到:

<div class="text"></div>
<div class="text"></div>
<p class="text">{{cursor here}}</p>

我不确定在什么情况下你会希望你的前一个元素类被复制到每个未来元素中,因为你在页面间隔,但我绝对不希望这个功能。我希望结果如下:

<div class="text"></div>
<p></p>

每次点击回车键时,如何强制CKEDITOR停止将前一个元素属性复制到页面的每个新元素中?

这是jsfiddle:http://jsfiddle.net/B4yGJ/158/

2 个答案:

答案 0 :(得分:1)

简短回答是无法强制CKEDITOR停止复制以前的元素属性。

如果您仔细阅读 enterkey 插件code on github,您会看到前一个节点为cloned,其中包含所有属性,内联样式和类(仅 id 已删除),然后插入parentbellow blockquote li pre 标记例外。

这完全有道理,因为通常我们希望继续使用所选样式键入,在创建新段落时进行事件处理(如在任何其他编辑器中一样)。

如果此行为仍然令人讨厌,您可以手动使用magicline plugin来强制阻止块之间的换行符或来自所选块的remove text formatting

答案 1 :(得分:1)

在编辑器上收听 'enter' 事件,然后获取元素并执行以下操作,以下代码从按下 Enter 键时创建的新 div 中删除了 data-element 属性。这个答案有点晚了,但它可能仍然对某人有帮助:)

    editor.on('afterCommandExec', function (e) {
    if (e.data.name == 'enter') {
        var el = e.editor.getSelection().getStartElement();

        // modify el according to your needs
        el.removeAttribute('data-element', '')
    }
});