quill.formatText()不允许嵌套格式
我使用quill.formatText()
为我的文本编辑器添加自定义的“高亮”格式。我伸出一个印迹,像这样: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
?
而不是使格式正确或错误,尝试使其某种标识用例的id。然后,您可以向跨度添加数据属性以保存该ID,或者在您的评论中创建一个独特的类。
您可能会发现在鹅毛笔在得到一个解决方案有帮助的这个拉入请求,会为你的工作(或者干脆直接使用此代码)
Hi Rik,这正是我要找的。该PR中的代码看起来非常简单,所以我应该能够根据我的需求做出决定。 – Pete
这不是一个单纯的优化 - 它是必要的确定性奎尔保证。如果您有一些文本“Test inside text”并且将其标注为粗体,则Quill保证输出为<strong>Test inside text</strong>
,而不是<strong>Test inside </strong><strong>text</strong>
或<strong>Test <strong>inside</strong> text</strong>
或无限数量的HTML合法选项。
羽毛笔的设计是明确的,所以您可以从设计中删除歧义,或使用允许使用的编辑器。
嗨杰森,谢谢你的回复。我明白为什么这个机制能够防止无效的HTML,但上面的'span's例子是完全有效和明确的。添加任意'span'标记是使用自定义Blot的一个要点 - 例如,如果有一些文本被两个“高亮”类所包含,而不是一个,它应该显示较暗,可以独立点击等。如果没有一种“关闭”决定论的方式,可以说,有没有其他办法可以实现这一点?我只在'readOnly'模式中插入这些高光。 – Pete
没有我发布的例子是完全合法的HTML。但它是模棱两可的,就像你的例子,这是问题所在。 – jhchen
我明白了。在那种情况下,会不会有推荐的方法来改变我的自定义“突出显示”Blot的'className'?因此,在'quill.formatText()'中,我可以传入一个额外的参数,例如:'quill.formatText(start,length,'highlight',2,true);'然后在Blot中的某处使className为“highlight-2”。这样我就可以制作不会干涉和合并的“高光-1”,“高光-2”等等。我意识到这不是'formatText'的实际语法,但是我对于Blots知之甚少,不知道是否有可能。 – Pete
此外,备案,使得两个不相交的亮点蜜饯这两个'跨度'就好了。只有当它们相交或嵌套时,Quill才会决定优化。 – Pete