如何停止 CKEditor 用 <br> 替换空标签

How to stop CKEditor replacing empty tags with <br>

有没有办法阻止 CKEditor 在空标签中插入 br 并停止移除包装元素。

例如:

当我在编辑器中添加内容时,默认会出现一对 'p'。

<div>
   <p>content</p>
</div>

但是当我删除 'content' 它被替换并且 dom 看起来像这样:

<p>
  br 
  ""
</p>

如何禁用此默认行为?就我而言,我想要:

<div>
  <p>
   <br>
  <p/>
</div>

backspace/delete(以及许多其他行为)由浏览器实现,并且可能因引擎而异。 CKEditor 覆盖了其中的一些(通常是最坏的),但我认为它无法处理这种情况。

无论如何,解决方案是以自定义方式处理退格键,但最直接的方法,即重新实现退格键行为,由于案例数量众多,并不容易。因此,我会尝试一些解决方法 - 例如修复退格后的 DOM。它会是这样的:

  1. 侦听 editor#key 事件并检查选择的位置和 DOM。记住它是否符合你要修复的情况。
  2. 等待几毫秒,或直到 #keyup 事件,然后按照您的意愿修复 DOM 和选择。

此外,阅读 Listening to DOM events in CKEditor 以防未执行的侦听器出现任何问题。