Javascript quill.formatText()赢得';不允许嵌套格式

Javascript quill.formatText()赢得';不允许嵌套格式,javascript,jquery,html,text-editor,quill,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; } } highligh

我正在使用
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
标记中。当我对文本进行两个选择时,一个在另一个的内部,只剩下外部
span

例如,使用文本
测试内部文本
。如果我突出显示整个字符串,除了里面的单词
,我希望得到:

测试内部文本

而我实际上得到:

测试内部文本


这似乎是QuillJS在幕后进行的优化——我是否可以关闭它,这样我就可以同时保持嵌套的
span
s?

这不仅仅是一个优化——这是决定论Quill保证所必需的。如果您有一些文本“Test inside text”,并说它是粗体的,那么Quill保证输出是
Test inside text
,而不是
Test inside
Testinside
或无限数量的HTML合法选项


Quill的设计是明确无误的,因此您可以从设计中消除歧义,或者使用允许歧义的编辑器。

与其使格式为真或假,不如尝试使其成为某种标识用例的id。然后,您可以将数据属性添加到跨度以保存id,或者创建一个独特的类,如注释中所示

您可能会发现这个对quill的Pull请求有助于找到适合您的解决方案(或者直接使用此代码)


另外,为了记录在案,制作两个不相交的高光将两个
span
s都保留得很好。只有当它们相交或嵌套时,Quill才会决定进行优化。嗨,Jason,谢谢你的回复。我理解为什么有防止无效HTML的机制,但是上面的
span
s示例是完全有效和明确的。添加任意的
span
标记是使用自定义Blot的目的-例如,如果有一些文本包含在两个“突出显示”类中,而不仅仅是一个,那么它应该显示得更暗,可以独立单击,等等。如果没有办法“关闭”这种决定论,那么可以说,有没有其他方法来实现这一点?我只是在
readOnly
模式下插入这些亮点。不,我发布的示例是完全合法的HTML。但它是模棱两可的,就像你的例子一样,这就是问题所在。在这种情况下,是否有一种建议的方法来更改我的自定义“highlight”Blot的
类名
?例如,在
quill.formatText()
中,我可以传入这样一个额外的参数:
quill.formatText(start,length,'highlight',2,true)formatText
的实际语法,但我对Blots的理解还不够深入,不知道这样做是否可行。嗨,瑞克,这正是我想要的。该PR中的代码看起来非常简单,因此我应该能够根据自己的需要对其进行欺骗。