• 初探富文本之富文本概述


    初探富文本之富文本概述

    富文本编辑器通常指的是可以对文字、图片等进行编辑的产品,具有所见即所得的能力。对于InputTextarea之类标签,他们是支持内容编辑的,但并不支持带格式的文本或者是图片的插入等功能,所以对于这类的需求就需要富文本编辑器来实现。现在的富文本编辑器也已经不仅限于文字和图片,还包括视频、表格、代码块、思维导图、附件、公式、格式刷等等比较复杂的功能。

    描述

    富文本编辑器实际上是一个水非常深的领域,其本身还是非常难以实现的,例如如何处理光标、如何处理选区等等,当然借助于浏览器的能力我们可以相对比较简单的实现类似的功能,但是由此就可能导致过于依赖浏览器而出现兼容性等问题。此外,当前有一个非常厉害的选手名为Word,当产品提出需求的时候,如果是参考Word来提的,那么这就是天坑了,Word支持的能力太强大了,那么大的安装包也不是没有理由的,其内部做了巨量的富文本相关case的处理。

    当然在这里我们叙述的是在浏览器中实现的富文本,我们也不太可能在浏览器中凭借几百KB或者几MB来实现Word这种几GB安装包所提供的功能。虽然仅仅是在浏览器中实现富文本编辑的能力,但是这也并不是一件容易的事情。对于我们开发者而言,可能会更加喜欢使用Markdown来完成相关文档的编写,当然这就不属于富文本编辑器的范畴了,因为Markdown文件是纯文本的文件,关注点主要在渲染上,如果想在Markdown中拓展语法甚至嵌入React组件的话的话,可以参考markdown-itmdx项目。

    演进之路

    Web富文本编辑器也是在不断演进,在整个发展的过程中,也是遇到了不少困难,而正是因为这些问题,可以将发展历程分为L0L1L2三个阶段的发展历程。当然在这里没有好不好,只有适合不适合,通常来说L1的编辑器已经满足于绝大部分富文本编辑场景了,另外还有很多开箱即用的富文本编辑器可选择,具体的选型还是因需求而异。

    类型特点产品优势劣势
    L01. 基于浏览器提供的contenteditable实现富文本编辑。
    2. 使用浏览器的document.execCommand执行命令操作。
    早期轻量编辑器。较短时间内快速完成开发。可定制的空间非常有限。
    L11. 基于浏览器提供的contenteditable实现富文本编辑。
    2. 数据驱动,自定义数据模型与命令的执行。
    石墨文档、飞书文档。满足绝大部分使用场景。无法突破浏览器自身的排版效果。
    L21. 自主实现排版引擎。
    2. 只依赖少量的浏览器API
    Google Docs、腾讯文档。完全由自己控制排版。技术难度相当高。

    L0

    在前边是将当前的编辑器发展归为了L0L1L2三个阶段,也有将L0阶段再分两个阶段,总分为四个阶段的,不过由于这两阶段都是完全依赖于contenteditabledocument.execCommand的实现,所以在这里就统归于L0了。

    在富文本编辑器出现之前,浏览器就已经具备了展示富文本的能力,通过编排HTMLCSS就可以展示富文本的内容,但对于用户输入,浏览器所提供的