Quill编辑器插入自定义HTML记录的示例详解

由于Quill编辑器自带的富文本过滤(大部分主流编辑器都会对富文本进行过滤处理),导致开发者想要配置自定义HTML模板时,遇到了不少麻烦。

一、Quill渲染逻辑分析

为了自定义Quill中的HTML块内容,首先需要了解Quill内部的渲染流程,这里有几个关键的概念需要了解:

1、Delta

Delta是Quill内部定义的一个数据格式,用于表示文档内容以及文档修改操作,易读且格式简单,通过Delta的形式来维护文档内容,HTML内容和Delta两者可以相互转化。

举个例子:

这样一段富文本会被表示成以下的格式:

{"ops":[{"insert":"thisisasimpletext.\\nbutwhen"},{"attributes":{"bold":true},"insert":"itis"},{"insert":"notbold.\\nletmetry"},{"attributes":{"italic":true},"insert":"italic"},{"insert":"haha\\nwhatabout"},{"attributes":{"italic":true,"bold":true},"insert":"both"},{"insert":"\\n"}]}"

普通的文本会被定义成一个个的insert动作,每一项代表这一个delta,都是对文本内容的描述。

类似的,如果修改和删除也会生成对应的delta,之后会将新生成的changedelta,与原有的delta进行合并操作,生成新的delta。(delta中一共包含三种操作:insert、delete、retain)

保留前10个字符,对后续的20个字符进行加粗操作的delta如下:

{"ops":[{"retain":},{"retain":,"attributes":{"bold":}}]}

保留前10个字符,对后续的20个字符进行删除操作如下:

{"ops":[{"retain":},{"delete":}]}

2、Parchment

Parchment是抽象的文档模型,对Blot进行管理。

将Parchment理解成完整的DOM树结构的话,那么Blot就是其中一个个单一的节点。而Blot去了Quill中默认的以外,还允许我们进行自定义,给了更大的扩展空间。

3、Blot

Blot是Parchment文档的组成部分,相当于对DOM节点类型的抽象,而一个具体的Blot实例里仍有其他的节点信息。

全局的根节点Blot是由Quill内部自定义的Scroll类型Blot,管理其下面的所有Blot。

Quill中默认定义的Blot如下:

这其中常见的包括TextBlot(行内普通文本)、Inline(行内携带样式的普通文本)、Block(块级行,一般以段落p为单位)、Break(换行)、Image(图片IMG插入)、Bold(加粗文本)。

而一段HTML如何构建出Blot?Quill中会根据节点类型优先排除文本节点,如果是元素节点会根据节点的ClassName进行再次判断,如果仍然无法找到匹配的BlotName,则默认匹配以下的映射关系,来找到对应的BlotClass。

4、Delta的实际意义

既然已经有Blot可以来表示我们的内容结构了,为什么还需要Delta?Delta本身只是一份内容数据的维护,也就是说HTML的更新,无论是用户输入,还是API操作,都会同步更新到Delta中,而Delta如果不作为HTML的数据源的话,那么维护一份Delta数据的意义又在哪里?

如果HTML=>Delta,而不存在Delta=>HTML,那么不停地去维护一份delta的意义是什么?

1、由Delta生成HTML其实是存在的,只不过应用场景只限于初始化文档的时候,Quill会对传入的初始化HTML字符串进行解析处理,生成对应的Delta,其次通过applyDelta的方式,生成DOM节点回显与页面中。

2、看到这里你可能还不满意,为啥非要走这一步流程,初始化的时候直接一段字符串document.getElementById('container').innerHTML=val不行吗,是的,可以,但是Delta的存在让用户的文档变得粒度更细小,变得易维护,变得可追溯。假如A和B同时编辑着一份文档,A删除了第二行的10个字符,不需要将文档内容全量更新,只需要提交action操作,同步自己的行为,而B这边也只需要进行冲突处理后merge即可。虽然Delta的维护让逻辑变得复杂了不少,但它的存在也让文档有了更多扩展的可能。

5、编辑器渲染与更新流程

对于内容的修改一共有以下3种方式:

1、初始化编辑器内容:初始化调用quill.pasteHTML,经过HTML过滤和解析回显到编辑框中。

2、InputEvent:用户输入和编辑操作,通过MutationObserver监听处理,更新delta。

3、API调用:调用内部提供API,通过modify方法,而后调用全局Scroll实例的方法去修改。

二、插入自定义HTML块

按照第一部分的讲述,我们需要插入一个自定义HTML块,同时又要Quill能够识别,聪明的你一定想到了,我们需要自定义一个Blot。通过定义好Blot的方式,让Quill在初始化的时候能够识别我们的HTML块展示,同时也让我们在插入HTML块的时候不会被Quill进行脏HTML过滤。

注册Blot方法如下:

exportdefaultfunction(Quill){//引入源码中的BlockEmbedconstBlockEmbed=Quill.import('blots/block/embed');//定义新的blot类型classAppPanelEmbedextendsBlockEmbed{staticcreate(value){constnode=super.create(value);node.setAttribute('contenteditable','false');node.setAttribute('width','100%');//设置自定义htmlnode.innerHTML=this.transformValue(value)returnnode;}

statictransformValue(value){lethandleArr=value.split('\n')handleArr=handleArr.map(e=>e.replace(/^[\s]+,'').replace(/[\s]+$/,''))returnhandleArr.join('')}

//返回节点自身的value值用于撤销操作staticvalue(node){returnnode.innerHTML}}//blotNameAppPanelEmbed.blotName='AppPanelEmbed';//class名将用于匹配blot名称AppPanelEmbed.className='embed-innerApp';//标签类型自定义AppPanelEmbed.tagName='div';Quill.register(AppPanelEmbed,true);}

接下来你只需要这样调用,便可以在编辑器中插入自定义的HTML块:

quill.insertEmbed(quill.getSelection().index||0,'AppPanelEmbed',`自定义面板标题

自定义面板内容
footer
`);

传参格式要求如下:

insertEmbed(index:Number,type:String,value:any,source:String\='api'):Delta

由于contenteditable属性放开,为了防止造成xss攻击,所以需要我们对该属性做特殊的过滤处理,这里以xss模块处理为例:

handleWithXss(content){constoptions={whiteList:{...div:['class','style','data-id','contenteditable'],...},css:{whiteList:{color:true,'background-color':true,'max-width':true,},},stripIgnoreTag:true,onTagAttr:(tag,name,value,isWhiteAttr)=>{//针对div的contenteditable处理if(isWhiteAttr&&tag==='div'&&name==='contenteditable'){return'contenteditable="false"';}},}//自定义规则constmyxss=newxss.FilterXSS(options)returnmyxss.process(content)}

THE END
1.网页编辑软件有哪些?网页编辑工具下载互联网时代,网页是向人们展示信息的最好媒体,所以制作的网页要能充分吸引访问者的注意力,让访问者产生视觉上的愉悦感。如果你想开发一个网站,那你肯定需要一款专业的网页编辑器,它是一款非常专业的网页编辑辅助工具,能够极大提高我们的工作效率。目前市https://www.32r.com/zt/305.html
2.HTML在线编辑器重塑网页开发未来,打造便捷开发体验摘要:HTML在线编辑器是重塑网页开发未来的重要工具。这种编辑器允许开发者在云端进行实时协作,提高开发效率和便捷性。通过在线编辑器,开发者可以随时随地编写和修改代码,无需安装任何软件。这种创新的技术趋势将推动网页开发行业的快速发展,为开发者提供更加灵活、高效的开发方式。 http://3g.qiuruikeji.cn/post/646.html
3.文本代码编辑器免费版推荐富文本编辑器生成html代码代码文本编辑器是编写和编辑代码的主要工具。它们提供基本的文本编辑功能,如新建、打开、保存、复制、粘贴等操作,使开发人员可以轻松编写和修改代码。许多文本编辑器还支持语法高亮,可以根据编程语言的语法规则对代码进行颜色编码,使代码更容易阅读和理解。下面就为大家推荐一些代码文本编辑器。 更新:2024-12-18 小编:杰https://soft.3dmgame.com/zt/dmwbbj/
4.10款必备HTML5开发工具推荐,助力高效Web开发长时间敲代码的程序员因此能减轻疲劳。举例来说,当一名程序员在调整一段复杂的HTML5代码时,借助代码缩略图,他们能迅速找到需要修改的部分。 这款适用于特定环境的32位文本及HTML编辑器同样颇受欢迎,众多网页制作专家和程序开发者选择用它来替换笔记本,其功能既实用又便捷。 https://www.7claw.com/2802446.html
5.HTML编辑器html编辑器HTML编辑器是一种用于创建、编辑和预览HTML(超文本标记语言)代码的工具或应用程序。它提供了一个直观的界面,使用户能够轻松地编写和设计网页内容。本文主要介绍HTML 常用编辑器(VisualStudio Code、Sublime Text、Atom、Notepad++和Dreamweaver)。 参考文档:HTML 编辑器-CJavaPy https://blog.csdn.net/weixin_42098295/article/details/137158111
6.《HTML参考手册》使用指南(3)HTML<meta>标签name 属性 <meta name="Keywords" content="关键词" /> <meta name="Description" content="网站描述" /> 3:熟练地运用键盘快捷键同样是提高学习和工作效率的途径之一。 六、学习HTML常用的工具/HTML编辑器推荐与下载 用来编写HTML代码的工具有那些,最常用的是哪些,最好用的有哪些?下面W3Cschttps://www.douban.com/note/588968640/
7.基挫速开始《wangEditorv5富文本编辑器教程》可以自定义 html 实现腾讯文档、语雀文档的效果,参考 demoopen in new window 其他自行探索一个页面多个编辑器 wangEditor 支持多个编辑器共存,正常创建即可<div> <div id="toolbar-container-1"></div> <div id="editor-container-1"></div> </div> <hr> <div> <div id="toolbar-container-2"></divhttps://www.bookstack.cn/read/wangeditor-5.0-zh/23ee8f485ced8726.md
8.html可视化编辑器html可视化编辑器手机版 更新时间:2024-07-23 html可视化编辑器手机版html可视化编辑器手机版 html可视化编辑器app 更新时间:2024-07-23 html可视化编辑器apphtml可视化编辑器app html可视化编辑器 怎么制作 更新时间:2024-07-23 html可视化编辑器 怎么制作html可视化编辑器 怎么制作 https://news.qingflow.com/plugin/ss/index.php?s=html%E5%8F%AF%E8%A7%86%E5%8C%96%E7%BC%96%E8%BE%91%E5%99%A8.html
9.《剑网3》系列动画编辑器《剑网3》系列官方动画编辑器,江湖盛景、山河锦绣尽收其中。即刻下载制作剑网3系列高清视频和美图,打造属于自己的武侠新世界!http://movieeditor.jx3.xoyo.com/index.html
10.HTML网页编辑器中文版下载(HTML5开发app)v1.013《HTML网页编辑器》是一款专为Android系统用户打造的网页制作工具,实用性强的,操作简单,去繁为简的设计理念,让刚入门的用户也可以很快上手,实时查看网页元素信息,并进行修改上传。 【软件介绍】 《HTML网页编辑器》应用可以查看和编辑网页的源代码,比较适合移动网页开发人员使用。查看HTML/CSS并实时修改样式输出。 http://www.962.net/azgame/78844.html
11.前端实现markdown编辑器实现一个简单的markdown编辑器并不是一件难事, 把体验做好确是非常不容易的 希望简书能把markdown编辑器的体验, 越做越好 最后编辑于:2018.12.05 09:21:26 ?著作权归作者所有,转载或内容合作请联系作者 上一篇 查看连载目录 下一篇 zhaoolee维护开源书《Chrome插件英雄榜》《在线工具秘籍》《中国人的表情包https://www.jianshu.com/p/a57114bd9380
12.鬼谷八荒mod编辑器下载鬼谷八荒mod启动器v0.2.1鬼谷八荒MOD编辑器v0.2.1使用说明 1.安装《鬼谷八荒》MOD加载器:https://patch.ali213.net/showpatch/166033.html 2.将下载后的文件解压到游戏根目录,运行一次游戏即可。 鬼谷八荒补丁表格 修改器下载 角色捏脸 气运存档 补丁工具 先天气运修改器160项 https://patch.ali213.net/showpatch/165627.html
13.所见即所得HTML编辑器FroalaEditor3.1.1破解过程Laravel只需改一个字符即可。用编辑器搜索 new Image,然后会看到下面 !0 === f.ul 只需把 === 改成!== 就好了。 然后在 html 内添加 display:none 去隐藏,代码如下 <style>.fr-wrapper:nth-child(2){display:none;}</style> 到此完美解决,至于还有没有其他限制,暂时不知道。https://learnku.com/articles/44957
14.好用的Markdown编辑器一览格式转换方便,Markdown 的文本你可以轻松转换为 html、pdf等。 可以保存称纯文本 支持Markdown的编辑器太多,功能也不完全一致,有的是用来进行基本的写作,有的是用来写代码的,有的甚至只是博客平台配套的编辑器。本文按照编辑器的平台进行简单的介绍。 在线的Markdown编辑器 https://www.williamlong.info/archives/4319.html
15.可视化HTML编辑器共有99款 可视化HTML编辑器开源软件,第1页 html可视化编辑器,html编辑器,html编辑器下载,html编辑器jsp,简单html编辑器,asp.net html编辑器,html编辑器原理,html编辑器开源,php html编辑器,java html编辑器 软件过滤: 排序: 收录时间 | 浏览数 可视化HTML编辑器 CKEditor CKEditor是新一代的FCKeditor,是一个重https://www.360doc.cn/article/9200790_438489545.html
16.HTML编辑器手机版下载读取并修改页面源文件 查看网站的网页元素并实时修改 点击查看功能 应用说明 《HTML网页编辑器 Live HTML Website Editor》应用可以查看和编辑网页的源代码,比较适合移动网页开发人员使用。查看HTML/CSS并实时修改样式输出。 包名:web.dassem.livewebsiteeditorfree MD5:cd16648c73b83a80aa4adea07dd259d8软件http://m.downcc.com/d/183728
17.《网页设计与制作》教学大纲知识要点:常用的网页编辑器 三、本章学时数:2+2学时 第二章HTML标记语言 一、教学要求 了解:HTML语言的发展情况; 掌握:HTML的基本概念、文档的基本结构,以及HTML文档结构标记、段落标记、字符标记、链接标记、图像标记、列表标记、表格标记等HTML的常用标记及相关属性;熟练应用HTML标记语言对利用网页设计工具软件设计出https://www.hfuu.edu.cn/jcjx/33/d3/c1900a13267/page.htm
18.html在线编辑器ueditor标准版码农集市专业分享IT编程学习资源html在线编辑器ueditor标准版裸心**EA 上传1.82 MB 文件格式 zip jsp版 ueditor 是一个好用的网页在线编辑器,兼容性好,能上传图片 视频 动画 等功能。功能非常强大,jsp版本点赞(0) 踩踩(0) 反馈 所需:1 积分 电信网络下载 python入门的概要介绍与分析 2024-12-15 09:40:17 积分:1 https://www.coder100.com/index/index/content/id/520721
19.html编辑器《TinyMCE在线编辑器》html编辑器《TinyMCE 在线编辑器》2012-02-16 上传大小:797KB 所需:10积分/C币 TinyMCE编辑器(HTML编辑器) v4.1.5 中文官方版.zip TinyMCE是一个基于浏览器的所见即所得编辑器,平台独立于Web之外,支持目前流行的各种浏览器,由javascript写成。这个编辑器可工作在Mozilla, firefox和MSIE上.很多网站系统都采用了 https://www.iteye.com/resource/oo3534-4068863
20.BBEditforMac(超好用的文本HTML编辑器)吾爱破解还在寻找一款好用的html编辑器和文本编辑器吗?小编为您带来BBEdit for Mac,BBEdit Mac版是一款世界https://www.52pojie.cn/thread-1146041-1-1.html