是否可以扩展 quill 以支持 <li> 内部的 <br>?

Is it possible to extend quill to support a <br> inside of an <li>?

我希望能够在 Quill 中实现如下内容:

<ul>
  <li>Something<br>
      Else
  </li>
</ul>

开箱即用,Quill 删除了 br 并且不支持使用 insertText(..., '\n', ...) 或用户编辑在 li 中添加 br。

我知道如何注册一个键盘绑定来处理,例如,"shift-enter" 以便能够创作这样的内容,它似乎既可以在 Parchment 中表示,也可以在 Quill 中表示这一点的 Blots(即 Break 等)。

综上所述,我不清楚这个用例是否可以通过模块在 Quill 编辑器中实现。

任何指点将不胜感激!

谢谢!

请记住以下几个限制条件:

  1. Quill 内容必须通过 API 规范地表示和明确修改。因此,如果您有 <ul><li>SomethingElse</li></ul> 并使用 insertText(index, '\n'),则生成 <ul><li>Something<br>Else</li></ul><p>Something</p><ul><li>Else</li></ul> 存在歧义。在 Quill 核心中,前者是不可能的,所以没有这样的歧义(注意产生 <ul><li>Something</li><li>Else</li></ul> 你会调用 insertText(index, '\n', 'list', 'bullet');)。因此,如果添加了软中断,则不能用换行符表示。 \r vs \n vs \r\n 的历史表明生成另一个换行符作为解决方案是个坏主意。

  2. 在架构上,Quill 数据模型在所有位置的相应 DOM 中始终同时具有块和叶节点,这很方便。 <br> 用作占位符,因此 <p><br></p> 表示一个空行,而不仅仅是 <p></p> (即使您指定,较旧的 IE <= 10 也不会在 <p></p> 上呈现任何高度它与 CSS 所以 <br> 在历史上是必要的)。内部块将添加 <br> 并在删除最后一个子项时自动添加,并在插入子项时删除 <br> 。鉴于这种特殊行为(虽然可以通过 defaultChild 修改),您不想扩展默认的 <br> 实现。

所以我的建议是创建一个使用
并指定 class 的自定义内联嵌入印迹,这样它就可以消除正常 <br> 之间的歧义。要通过 API 插入它,它将是 insertEmbed(index, 'customBr', true); 并且 getContents()<ul><li>Something<br class="custombr">Else</li></ul> 的 JSON 表示将是 [{ insert: "Something" }, { insert: { custombr: true } }, { insert: "Else" }, { insert: "\n", attributes: { list: 'bullet' } }].

这似乎可行,但尚未经过全面测试:https://codepen.io/quill/pen/BJaOxP