quill.formatText() 不允许嵌套格式
quill.formatText() won't allow nested formats
我正在使用 quill.formatText()
向我的文本编辑器添加自定义 "highlight" 格式。我像这样扩展了一个印迹:
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
s?
这不仅仅是一个优化——它是确定性 Quill 保证所必需的。如果你有一些文本 "Test inside text" 并说它是粗体,Quill 保证输出是 <strong>Test inside text</strong>
,而不是 <strong>Test inside </strong><strong>text</strong>
或 <strong>Test <strong>inside</strong> text</strong>
或无限数量的 HTML 合法选项。
Quill 被设计为明确的,因此您可以从设计中消除歧义,或者使用允许它的编辑器。
与其将格式设置为 true 或 false,不如尝试将其设置为某种标识用例的 id。然后,您可以向 span 添加一个数据属性来保存 id,或者创建一个唯一的 class,就像您的评论中那样。
您可能会发现这个 Pull Request on quill 有助于找到适合您的解决方案(或者直接使用此代码)
我正在使用 quill.formatText()
向我的文本编辑器添加自定义 "highlight" 格式。我像这样扩展了一个印迹:
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
s?
这不仅仅是一个优化——它是确定性 Quill 保证所必需的。如果你有一些文本 "Test inside text" 并说它是粗体,Quill 保证输出是 <strong>Test inside text</strong>
,而不是 <strong>Test inside </strong><strong>text</strong>
或 <strong>Test <strong>inside</strong> text</strong>
或无限数量的 HTML 合法选项。
Quill 被设计为明确的,因此您可以从设计中消除歧义,或者使用允许它的编辑器。
与其将格式设置为 true 或 false,不如尝试将其设置为某种标识用例的 id。然后,您可以向 span 添加一个数据属性来保存 id,或者创建一个唯一的 class,就像您的评论中那样。
您可能会发现这个 Pull Request on quill 有助于找到适合您的解决方案(或者直接使用此代码)