quill(vue-quill-editor) 编辑器中莫名多出一行

徐佐
2023-12-01

在使用 vue-quill-editor 富文本编辑器过程中,加载已有的富文本数据到编辑器,经常会出现编辑器中莫名其妙多出一段换行内容 <p><br></p>(一般出现在段落与其他内容之间,例如标题,引用,列表),每次重新编辑之前的内容时都必须手动删除这些空行,否则这些换行就会越积越多。这让我们的文案小伙伴很不开心。

问题必须得解决,否则就又要换编辑器了。

寻寻觅觅,寻寻觅觅,终于找到你,最符合我需求的编辑器——quill,样式不用多说,也是主流的黑白清新风,美观,功能上虽然不是很多,甚至还没有表格,网络图片上传(可以通过复制网络图片并黏贴解决)等功能,但它的代码高亮是最完美的,因为它本身就支持了hignlight.js,同样支持行内编辑模式,可自定义,总的来说,这是一款优点多但缺点同样明显的编辑器,但却完美契合我的需求,所以我比较喜爱这款。

先尝试直接使用 DOM 设置 innerHtml 进行设置原始内容,发现没有成功(在浏览器控制台可以成功,但是代码中无法设置,原因不明,猜测编辑器内部做了保护)。

matchSpacing函数内有这么一行:

var nodeHeight = node.offsetHeight + parseFloat(computeStyle(node).marginTop) + parseFloat(computeStyle(node).marginBottom);
if (node.nextElementSibling.offsetTop > node.offsetTop + nodeHeight * 1.5) {
  delta.insert('\n');
}

计算 node 的实际高度 nodeHeight,然后拿下一个兄弟元素的 offsetTopnode.offsetTop + nodeHeight * 1.5进行比较,如果前者比后者大,则插入一个换行。(不是很清楚这么做的目的,有想法的朋友可以留言说一下~),我们打印一下这三个值,发现系数1.5有点小,后来我改成了2,基本就不会有这种问题出现了。

也就是说,我目前的解决办法是把 quill.js 里系数1.5改成了2.....

ps:打印出 margin 的值,发现结果都是 0,设置 paddingline-height 也对这三个数据没有任何影响。

 类似资料: