
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里面处理一下图片
如果有错误,欢迎大家多提提意见~
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)