我正在使用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
?
答案 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有助于找到一个适合你的解决方案(或直接使用这个代码)