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

Stop CKEDITOR from Copying the Previous Element class into each new element on page

本文关键字:新元素 元素 Previous CKEDITOR Element 复制 阻止      更新时间:2023-09-26

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

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

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

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

<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/

简短的回答是不能强制CKEDITOR停止复制先前的元素属性。

如果你仔细阅读github上的enterkey插件代码,你会看到前面的节点被克隆了所有属性,内联样式和类(只有id被删除),然后插入到它的父节点或下面。blockquotelipre标签例外。

这完全有意义,因为通常我们希望在创建新段落时继续使用选择的样式输入(就像在任何其他编辑器中一样)。

如果这种行为仍然很烦人,你可以手动使用magicline插件,强制块之间换行或从选定的块中删除文本格式。

监听编辑器上的'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', '')
    }
});