HTML富文本编辑器Quill的使用

HTML富文本编辑器Quill的使用,第1张

两种主题

toolbar的自定义:

quill取消了getHtml()的API,getContents()返回的是Delta对象,一种JSON数组,getText()返回文本域里对应字符串。

因平台需将用户编辑的格式传回后台生成邮件的正文,而邮件的正文是Html格式,通过查issue找到获取Html的方法: quill.container.firstChild.innerHTML

因为最近有个需求,在从后台定时获取数据后展示,可以加粗和改变字体颜色,并且支持redo和undo,但不支持编辑文字,其实就是加个富文本但不能编辑。我刚拿到需求想,这不是很简单的需求,但后来发现这就是个坑。。

1、刚一开始,我用了项目原本使用的富文本编辑器 vue-html5-editor ,但发现并不能实现不编辑文字又能改样式,这时的我还没有意识到事情的严重性,以为只是个例,于是我又找了另一款富文本编辑器。

2、 wangeditor 是一款国人开发的富文本编辑器,轻量、强大,但它也不支持不编辑文字又能改样式,于是我觉得我得明白这些编辑器的原理到底是怎样的。

3、在查看了源码后,我终于明白上面的两款编辑器为什么不能不编辑文字又能改样式。上面的编辑器实现原理是根据 contenteditable 这个属性来使一个div变为可编辑状态,并且利用 execCommand 方法实现粗体、字体等一系列样式实现,但这个方法只在div是可编辑状态时可用,所以当我把contenteditable改为false后,execCommand就不管用了,所以才改不了样式。

4、知道了这点后,我明白应该寻找一款不依赖execCommand的富文本编辑器,我找到了 tiptap 和 ckeditor5 。

5、在对这两款进行了一定研究后,我发现了另一问题--它们会清除元素中的自定义属性。

例如这样的数据,会变为这样

这是我不能接受的,我开始了漫长的寻找解决办法之路。

经过了很长时间的看源码--查资料--看源码,终于解决了这个问题。

我使用的是 element-tiptap ,其实直接使用tiptap也可以,但因为我的项目就是使用的element-ui,所以我直接使用了这个库。

首先需要

然后

具体的我就不说了,我主要说自己写的span这个节点

attrs里就是需要保留的属性,parseDOM就是解析dom时所触发的方法,可以在这里获取到属性,在toDOM生成DOM是把这些属性加上。

======================================================================================》

最后我还是使用了quill,因为delta。。。

quill配置如下:

后台的数据处理与实时联动用到了ShareDB和richText

处理数据时使用 wss动态给到delta数据,然后使用setContents显示到页面上

使用text-change监听事件监听文本改动并返回

记录一下。

vue-quill-editor是我们在使用vue框架的时候常用的一个富文本编辑器,在进行富文本编辑的时候,我们往往要插入一些图片,vue-quill-editor默认的处理方式是直接将图片转成base64编码,这样的结果是整个富文本的html片段十分冗余,有可能导致提交失败,或者是用户体验很差,数据要传递很久才全部传送到服务器。 因此,在富文本编辑的过程中,对于图片的处理,我们更合理的做法是将图片上传到服务器,再将得到的图片链接插入到富文本中,以达到最优的体验。

首先安装quill editor       npm install vue-quill-editor --save

全局挂载  

在main.js中引用

使用

在需要用到富文本的vue中引用和配置quill editor工具栏

在editorOption中的handlers事件中处理图片上传(配置中的handlers是用来定义自定义程序的)

iview自带的upload上传自带三个函数

在methods里面处理一下图片

如果有错误,欢迎大家多提提意见~


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7529128.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存