注意:本文更关注quilljs底层的Patchment相关知识,在实际应用quilljs时,经常会通过构造Delta实例调用quill.updateContents(Delta)来改变编辑器内容。
Updates 和 Optimization
ScrollBlot是最顶层的ContainerBlot,它包裹其余所有的blots,并且管理编辑器内的内容变化。ScrollBlot会创建一个MutationObserver,用于掌控编辑器的内容。
ScrollBlot会追踪MutationRecords,然后调用MutationRecord的target中domNode对应的blot的update方法。相关的MutationRecords会被作为参数传入。接下来,ScrollBlot会调用所有受影响的blot的optimize方法(包括这些blot的child blot)。
update(mutation: MutationRecord[], sharedContext: Object)
Blot发生变化时会被调用,参数mutation的target是blot.domNode。在同一次更新循环中,所有blots收到的sharedContext是相同的。
optimize(context: Object)
更新循环完成后会被调用,避免在optimize方法中改变document的length和value。该方法中很适合做一些降低document复杂度的事。
简单来说,文档的delta在optimize执行前后应该是一样的,没发生变化。否则,将引起性能损耗。
Delection 和 Detachment
remove()
该方法是最常用也最简单的完全移除blot及其domNode的方法。remove主要是将blot的domNode从DOM树中移除,并调用detach()。
removeChild(blot)
该方法只有containerBlot及继承自containerBlot的类具备,作用是从该containerBlot的.children中移除传入的blot。
deleteAt(index, length)
该方法会根据给定的index及length来移除调用者的children中对应的blot及内容,若index为0且length为调用者的children的length, 则移除自身。
detach()
解除一切blot与quill相关的引用关系,从blot的parent上移除自身,同时对children blot调用detach()。
到这里,Patchment中Blot的主要生命周期已介绍完毕。quilljs的扩展性及其强大,几乎可以在quill编辑器中实现任何的定制化功能。通常的Block/Embed等Blot的定义都比较简单,容易理解,而相对复杂的应该是ContainerBlot如何应用。
后面讲专门写一篇文章,介绍“如何使用Container创建嵌套结构的内容”,有兴趣的朋友可以关注一下。
转载于:https://juejin.im/post/5cd04efc6fb9a03247156ff4
前言这篇文章中的很多内容都来自Adam Charron的《Getting to know QuillJS - Part 1》中,文中结合了我自己的一些理解和经验,内容也做了些调整,希望能帮到准备使用quilljs的你。quilljs是什么?quilljs是一个现代富文本编辑器,它具备良好的兼容性及强大的可扩展性。用户可以非常方便地实现自定义功能。另一特点是,quilljs自带一套数据系统...
Configuration
Quill允许通过多种方式对其进行自定义以满足您的需求。 本节致力于调整现有功能。 有关添加新功能的信息,请参见模块部分;有关样式的信息,请参见主题部分。
Container
Quill 需要一个容器,其中将附加编辑器。 您可以传入CSS选择器或DOM对象。
var editor = new Quill('.editor'); // First matching element will be used
var container = document.getElementB
DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师。
官方网站:devui.design
Ng组件库:ng-devui(欢迎Star)
本文基于DevUI的富文本编辑器开发实践和Quill源码写成。
EditorX是DevUI开发的一款好用、易用、功能强大的富文本编辑器,它的底层基于Quill,并对其做了大量扩展,以增强编辑器的能力。
Quill是一款API驱动、支持格式和模块定制的开源Web富文本编辑器,目前在..
尝试在浏览器中打开quilljs-table/index.html 。
本项目的目的
虽然此时代码或多或少被黑客攻击,但长期目标是提供足够的材料来理解表行为,以便我们最终为 quill 提供稳定的工作解决方案。
请随意添加您自己的文件和目录来玩这个概念。
到目前为止的进展
TABLE , TR和TD是容器-有可能在多个块印迹TD 。
所有表、行和单元格都由随机字符串标识,并且优化仅合并具有相同 id 的那些。
可以通过在网格中定义行数和列数来添加表。
可以向现有表格添加行和列(可通过工具栏中的按钮访问)。
可以从 Word 复制和粘贴表格。 工作正常
Vue Quill Editor是一个基于Quill.js封装的富文本编辑器组件,可以轻松地将富文本编辑器集成到Vue.js应用程序中,支持包括插入表格在内的各种富文本编辑功能。
表格是Vue Quill Editor中一个非常常用的功能之一。要在Vue Quill Editor中插入表格,首先需要在组件中引入Quill.js的Table模块,代码如下:
```js
import Quill from 'quill'
import Table from 'quill/modules/table'
Quill.register(Table, true)
引入Table模块后,就可以在Vue Quill Editor中使用Table模块中提供的API来创建、编辑和删除表格了。以下是一些常用的API:
- `insertTable(rows, columns)`:在当前光标位置插入一个指定行数和列数的表格。
- `deleteTable()`:删除当前光标所在的表格。
- `insertRowAbove()`:在当前所在行的上方插入一行。
- `insertRowBelow()`:在当前所在行的下方插入一行。
- `deleteRow()`:删除当前所在行。
- `insertColumnLeft()`:在当前所在列的左侧插入一列。
- `insertColumnRight()`:在当前所在列的右侧插入一列。
- `deleteColumn()`:删除当前所在的列。
除了这些API之外,还可以使用Quill.js提供的其他API来设置表格的样式、设置单元格的文本内容和格式等等。
总的来说,Vue Quill Editor提供了非常丰富的表格编辑功能,可以轻松地实现各种表格操作。在使用过程中,注意引入Table模块,并且熟悉Quill.js的API即可。