
因为最近有个需求,在从后台定时获取数据后展示,可以加粗和改变字体颜色,并且支持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监听事件监听文本改动并返回
记录一下。
以上就是关于JS获取剪切板内容全部的内容,包括:JS获取剪切板内容、富文本编辑器-1-选型、wangeditor复制word存在换行符等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)