quill.formatText()不允许嵌套格式

时间:2017-01-23 00:40:16

标签: javascript jquery html text-editor quill

我正在使用quill.formatText()向我的文本编辑器添加自定义“突出显示”格式。我像这样扩展了一个印迹:

let Inline = Quill.import('blots/inline');
class highlight extends Inline {
    static create() {
      return super.create();
    }

    static formats() {
      return true;
    }
}
highlight.blotName = 'highlight';
highlight.className = 'highlight';
highlight.tagName = 'span';
Quill.register(highlight);

然后我调用quill.formatText(start, selectionLength, 'highlight', true);,将我的选择包装在<span class="highlight">标记中。到现在为止还挺好。

麻烦的是,我希望每个选择都包含在自己的span标记中。当我对文本进行两次选择时,一次在另一次内部,只剩下外部span

例如,使用文字test inside text。如果我除了单词inside之外我突出显示整个字符串,我希望得到:

<span class="highlight">Test <span class="highlight">inside</span> text</span>

而实际上我得到了:

<span class="highlight">Test inside text</span>

看起来这是QuillJS在幕后进行的优化 - 无论如何我可以将其关闭,这样我就可以保留两个嵌套的span

2 个答案:

答案 0 :(得分:2)

这不仅仅是一种优化 - 确定性Quill保证是必要的。如果您有一些文本“在文本内部测试”并说它是粗体,Quill保证输出为<strong>Test inside text</strong>,而不是<strong>Test inside </strong><strong>text</strong><strong>Test <strong>inside</strong> text</strong>或无限数量的HTML合法选项。

Quill的设计非常明确,因此您可以从设计中消除歧义,或使用允许它的编辑器。

答案 1 :(得分:1)

不要将格式设置为true或false,而是尝试使用某种标识用例的id。然后,您可以向span添加数据属性以保存ID,或者在评论中创建一个唯一的类。

你可能会发现这个关于quill的Pull Request有助于找到一个适合你的解决方案(或直接使用这个代码)

https://github.com/quilljs/quill/pull/1217