在CKEditor中创建新段落时,前一段的属性(样式,类)将被复制到新的段落.有办法防止这种情况吗?
例如,如果我在一个居中的段落中写,并按Enter键创建一个新的段落,我的用户希望新的段落是一个简单的,没有“继承”任何东西从上一个默认情况下.
编辑
我设法得到它(危险地未经测试)使用Reinmar的提示.这是我清理的我希望这有助于别人.如果你们在这里看到一个明显的错误,请告诉我
CKEDITOR.on('instanceCreated',function(e) { e.editor.on('key',function(evt) { if (evt.data.keyCode === 13) { // if we call getStartElement too soon,we get the wrong element setTimeout(function () { var se = e.editor.getSelection().getStartElement(); if(se.getName() == "span") { var text = se.getText(); // Store text,we are about to nuke the spans while (se.getName() == "span") { // possible infinite loop danger se = se.getParent(); } if (text.length == 0) se.setHtml(" "); // It's important that this is not empty else se.setHtml(text); } debug(se.getHtml()); se.removeAttribute("class"); se.removeAttribute("mycustomattr"); se.removeAttribute("myothercustomattr"); window.bla = se; // useful for debugging },10); } }); });
解决方法
最近两天我在想你的问题,我有一个想法.我检查了输入插件代码,最好把它保持不变.相反,您可以在输入键上收听,并且在执行了自定义输入后,您应该从新创建的块中清除样式.
这些方法将会有用:
> editor.on(‘key’,function(evt){evt.data.key …})
> editor.getSelection().getStartElement() – 输入选择开始后将被放置在新创建的块中(内联元素如粗体,下划线等).
> CKEDITOR.dtd.* – 元素集可以帮助您决定哪些元素是内联样式并应该被删除.
> element.isEmptyInlineRemoveable – 你应该删除放置游标的空的内联元素.
> editor.createRange().setStartAt(block,0).select() – 最后你应该将插入符放在正确的位置(在块的开头 – < p> /< div> /< li> /等等.).
不幸的是,你可以看到,这不是一件容易的事情,所以祝你好运:)