富文本编辑器介绍

news2025/2/24 16:44:57

1、富文本编辑器的意义

普通的文本框(如input, text)只能输入纯文本以及 Emoji(只不过是特殊编码的文本),如果只是简简单单写些纯文本的内容(比如表单,简单的评论等),这是一个非常不错的选择,但是如果需要让用户输入包括但不限于图片、视频、加粗文本等内容,这种方式就行不通了。这是时候就可以使用富文本编辑器来实现。

富文本编辑器,Multi-function Text Editor, 简称 MTE, 是一种可内嵌于浏览器,所见即所得的文本编辑器。功能强大的富文本编辑器可以实现文本编辑、格式设置、排版设置、媒体文件编辑上传、超链接、文本导出、打印等等功能。

2、富文本编辑器的分类

常见的富文本编辑器现实方式可以分成三类,分别是用textarea 、 contenteditable 和Canvas。

l Textarea

最早的编辑器实现,起始阶段,最简单的如多行文本,结构简单使用方便,一些文本格式和复杂的样式难以实现,推荐仅在对编辑要求不高的场景使用。

l Contenteditable

HTML中的contentEditable的属性可以打开某些元素的可编辑状态( div, table ,p ,span ,body),将元素的contenteditable 属性设为 true时,该元素则成为了编辑器的主体。配合着 document.execCommand 能够实现绝大多数功能,当前主流编辑器都是基于 contenteditable 来设计的。

contentEditable使dom变得可编辑,那么execCommand则提供了从外部修改DOM的api。可以操作dom内容的变化。两者进行组合,即可实现一个最简单的富文本编辑器。

但是单纯依赖contenteditable 直接产出 html 会带来一些问题,例如相同的输入在不同浏览器下的输出可能不一致,相同的输出在不同浏览器中展示存在差异,同时 html 使用具有局限性,不方便在跨平台间使用。因此更好的方案是制定一套数据结构 + 文档模型,所有的输入都经过编辑器生成约定的产物,这样在不同的平台均可解析并且保证得到预期的效果。

l contenteditable + Selection + Range

这种方式比上面的execCommand 好处就在可以不过度依赖浏览器的行为,使用 Selection 获取用户选区,使用 Range API 来操控选区(比如简单的加粗操作),不过用这种方式就需要你自己去处理各种选区情况了(比如节点内操作、跨节点操作等),

相较于上面的方式,开发难度提高。但是开发自由度也提升了。

l Canvas

这种方式差不多就是浏览器给你提供绘图能力和监听用户输入的能力,除此之外其他全部你自己实现。因为完全不使用contenteditable,也就完全摆脱了对浏览器行为的依赖。当时难度也就成倍增长。相当于在浏览器里面在开发一个浏览器了。

3、常用文本编辑器介绍和比较

UEditor

适用浏览器:IE6+、FireFox、Chrome...

UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,开源基于BSD协议,所有源代码在协议允许范围内可自由修改和使用。UEditor 在设计上采用了经典的分层架构设计理念,尽量做到功能层次之间的轻度耦合。具体来讲,整个系统分为了核心层、命令插件层和UI层这样三个低耦合的层次。

1、核心层提供了编辑器底层的一些方法和概念

2、在核心层之上覆盖的是命令插件层。之所以叫命令插件层,是因为UEditor中所有的功能型实现都是通过这一层中的命令和插件来完成的,并且各个命令和插件之间基本互不耦合

3、在命令插件层之上则是UI层。UEditor的UI设计与核心层和命令插件层几乎完全解耦,简单的几个配置就可以为编辑器在界面上添加额外的UI元素和功能。

优点:

1、体积小巧,性能优良,使用简单、开源免费

2、功能比较全面,插件很多,还可以很方便插入百度地图,接入十分简单

3、支持中文文档

4、界面美观

缺点:

1、2016年后,百度基本已经很少对编辑器和文档的维护更新。

2、虽然支持中文文档,但是内容少,可查询资料少。

3、图片只能上传到本地服务器,如果需要上传到其他服务器需要改动源码

中文文档:http://fex.baidu.com/ueditor/

GitHub: https://github.com/fex-team/ueditor

CKEditor

适用浏览器:IE6+、FireFox、Chrome、Safari、Opera...

CKEditor 是一款功能强大的开源在线文本编辑器。它所见即所得的特点,使你在编辑时所看到的内容和格式,能够与发布后看到的效果完全一致。CKEditor 完全是基于 JavaScript 开发的,因此不必在客户端进行任何安装,并且兼容各大主流浏览器。

由于CKEditor的整体架构是建立在灵活的插件机制之上的。因此我们可以将特定的自定义功能独立于编辑器的核心代码之外。实际上包括许多CKEditor已有的预置功能,都是利用插件的形式开发的。因为不同的插件位于各自的文件,所以管理维护都很方便。

优点:

1、功能齐全,拥有丰富的样式和插件

2、定制性强,提供较多的扩展性API

3、由IBM支持的开发团队进行维护,社区活跃,仍在更新和修复bug

4、高性能的实时预览,行内编辑功能,使得编辑内容更加直观

缺点:

1、只有英文文档,需要额外的开发时间。

官方文档WYSIWYG HTML Editor with Collaborative Rich Text Editing

GITHub:https://github.com/ckeditor/ckeditor5

BraftEditor

使用浏览器:IE6+、FireFox、Chrome...

Brafteditor是一个美观易用的React富文本编辑器。这个编辑器开箱即用,不用重复早轮子。其底层逻辑是基于Facebook的draft-js开发的,draft-js需要各种配置才能使用,而Brafteditor使用起来则非常简单。其有两种数据结构,分别是raw(用于数据的编辑操作)和 html (用于数据的展示)。他们之间可以进行转换,但是可能导致一些属性的缺失。所以一般需要将两种数据都进行存储。

优点:

1、使用简单,不需要额外配置、安装即可使用

2、基于react开发,和react项目有非常好的兼容性

3、中文开发文档,文档用例清晰明确

4、具有高度可扩展性和可定制性;

缺点:

1、当需要表格这样复杂的内容结构时,编辑器将会变慢,代码也会变得复杂

2、文档少,查阅不方便。

3、提供的基础插件较少,需要定制开发

4、缺乏官方的移动端支持

中文文档:Braft Editor | 基于DraftJS的强扩展性React富文本编辑器

英文文档:Rich Styling | Draft.js

GITHub:https://github.com/facebook/draft-js

TinyMCE

适用浏览器:IE6+、FireFox、Chrome、Safari、Opera...

功能方面虽然不能称得上是最强,但绝对能够满足大部分网站的需求,并且功能配置灵活简单。另一特点是加载速度非常快,如果你的服务器采用的脚本语言是PHP,那还可以进一步优化。它支持市面上所有流行的浏览器,包括 IE6+ 和 Firefox1.5+,

该编辑器由JavaScript 编写而成,功能配置灵活简单,同时 TinyMCE 可以很方便的在可视化模式与 HTML 模式进行切换,TinyMCE 是一个根据 LGPL license 协议发布的自由软件,你可以把它用于商业应用。

优点:

1、插件丰富,可扩展性强,有能力可以无限拓展功能

2、界面好看,符合现代审美, 提供经典、内联、沉浸无干扰三种模式

3、多语言支持,官网可下载几十种语言。

4、开源免费的,目前一直有人维护。

缺点:

1、部分文档为中文,但是官方文档为英文,定制和扩展开发需要花费时间

2、需要付费订阅才能使用其高级功能

中文文档:TinyMCE中文文档中文手册

英文文档:The Most Advanced WYSIWYG HTML Editor | Trusted Rich Text Editor | TinyMCE

GITHub:https://github.com/tinymce/tinymce

Quill.js

适用浏览器:IE6+、FireFox、Chrome、Safari、Opera...

Quill 是一个免费的,开源的 WYSIWYG (What You See Is What You Get)编辑器,专为现代网络而打造。凭借其模块化架构和富有表现力的 API,你可完全自定义以满足任何需求。

Quill 专为编辑和字符设计的,并在这些以自然文本为中心的单元之上构建其API。要找出某些文字是否是粗体,Quill 不需要遍历 DOM 查找 <b> 或者 <strong> 节点或者一个 font-weight 样式属性,只需调用 getFormat(5, 1)。它的所有核心 API 调用都允许任意索引和长度进行访问或修改。其事件 API 还会以直观的 JSON 格式报告更改。而无需解析 HTML 或者比较 DOM 树差异

优点:

1、易于设置和使用,简洁轻便,真正做到了开箱即用。

2、预设编辑器样式的主题支持。

3、由于其 API 驱动的设计,无需像在其他文本编辑器中那样解析 HTML

缺点:

1、有限的定制功能

2、更新和补丁较少

3、可能存在 XSS 安全漏洞

4、官方文档为英文,开发需要花费时间

英文文档: Quill - Your powerful rich text editor

GITHub:https://github.com/quilljs/quill/tree/develop/docs/docs/quickstart.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

包管理工具Yarn的使用和命令总结

大家好&#xff0c;今天总结了一下Yarn这个包管理工具的使用&#xff0c;虽然Npm 已经奠定了前端工程基础&#xff0c;但是追求完美的前端程序员们又基于 Npm 不足的地方&#xff0c;提供了新的完善思路&#xff0c;针对如 Npm 安装包的速度问题&#xff0c;包的版本问题加以改…

css 实现虚线效果的3种方式详解

一、效果 首先可以看一下下图显示的实现效果&#xff1a; 用三种方式实现了虚线效果&#xff1a; 点击查看demo代码 二、实现 1、border 属性 查看 mdn 的 border&#xff0c;我们知道 border 可以用于设置一个或多个以下属性的值&#xff1a;border-width、border-style、…

【微信小程序开发】自定义tabBar案例(定制消息99+小红心)

&#x1f935;‍♂️ 个人主页: 计算机魔术师 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f310; 推荐一款找工作神器网站: 点击跳转牛客网 |笔试题库|面试经验|实习招聘内推| 还没有账户的小伙伴 速速点击链接…

vue系列(三)——手把手教你搭建一个vue3管理后台基础模板

目录 一、前言&#xff1a; 二、网站页面分析 三、开发步骤 &#xff08;一&#xff09;、安装element &#xff08;二&#xff09;、安装使用svg插件 &#xff08;三&#xff09;、编写主界面框架代码 &#xff08;四&#xff09;、编写菜单栏 &#xff08;五&#xff0…

如何使用wireshark抓取HTTPS数据包?

1、wireshark 抓包为什么不显示出来&#xff1f; wireshark 是基于网络层的抓包工具&#xff0c;通过捕获通信双方的TCP/IP包实现内容提取。对于应用层的数据&#xff0c;如果应用层协议是公开的&#xff0c;就可以直接显示数据。处理HTTPS 协议时&#xff0c;因为不知道客户端…

前端知识——css之flex布局

1.基本概念 flex布局是一种布局模型&#xff0c;经常被称之为flexbox&#xff0c;使用flex布局之后&#xff0c;他会给子元素提供强大空间分配和对齐能力。 在没有使用flex布局之前&#xff0c;常用布局有&#xff1a;流式布局&#xff0c;浮动布局&#xff0c;定…

Vite代理解决跨域问题

Vite代理解决跨域问题 我们在编写前端项目的时候&#xff0c;经常会遇到跨域的问题&#xff0c;当我们访问后端 API 的 URL 路径时&#xff0c;只要域名、端口或访问协议&#xff08;如 HTTP 和 HTTPS&#xff09;有一项不同&#xff0c;就会被浏览器认定为跨域。另外我们也会…

小程序真机调试提示系统错误

Error: 系统错误&#xff0c;错误码&#xff1a;80051,source size 7935KB exceed max limit 2MB [20220929 16:18:58][wxfc8aa5984cac7f72] [1.06.2208010][win32-x64]// 说明你源文件大小为7985kb 超过了2M 所以编译失败解决方法 1. 压缩项目中的图或转为base64格式 …

【Spring+SpringMVC+Mybatis】Spring+SpringMVC+Mybatis实现前端到后台完整项目

文章目录&#x1f3f4;‍☠️SpringMVC简介SpringMVC是什么SpringMVC的基础架构SpringMVC的优点&#x1f3f3;️‍&#x1f308;SpringMVC接管Web说明三层框架SpringMVC的简单开发&#x1f6a9;Spring搭建&#x1f6a9;Mybatis搭建&#x1f3c1; Spring整合Mybatis✅结语&#…

(element-ui)取消el-table的hover状态,取消高亮显示

文章目录前言方法一 ------覆盖css样式方法二------卸载掉背景颜色&#xff08;类似于方法一&#xff09;方法三------使用函数方法方法四------禁用鼠标悬浮怎么办&#xff1f;究极解决------将错就错前言 在使用element-ui的el-table表格的过程中&#xff0c;会发现&#xf…

VsCode配置JavaWeb(最新)

我个人是很喜欢VsCode的&#xff0c;开源免费、功能全面。所以为了方便&#xff0c;我把我几乎所有的运行都集成到了VsCode上来&#xff0c;JavaWeb也不例外。 前言 之前也在CSDN上看到有些博主写了配置方法&#xff0c;但是很不幸的是&#xff0c;插件Tomcat for java已经不可…

Web过滤器:Filter

Filter 概述工作原理生命周期web.xml配置的常用节点FilterConfig类过滤器链FilterChainHttpFilter的简化设计自动登录功能的改进验证登入页面的改进浏览器的缓存功能概述 Filter过滤器,是Servlet技术中最实用的技术,能够管理Web服务器的所有Web资源,实现信息拦截、权限访问控…

vue动态路由添加,vue-router的addRoute方法实现权限控制,添加根路由和子路由

addRoute路由分为静态路由和动态路由静态路由和动态路由的优缺点动态路由实现思路&#xff1a;动态路由遇到的问题与解决方式动态添加子路由路由分为静态路由和动态路由 静态路由和动态路由的优缺点 1、中大型项目&#xff0c;采用的都是动态路由方式,因为后台导航目录运营人…

Vue3如何封装组件?

&#x1f525;&#x1f525;&#x1f525;欢迎关注csdn前端领域博主: 前端小王hs &#x1f525;&#x1f525;&#x1f525;email: 337674757qq.com &#x1f525;&#x1f525;&#x1f525;前端交流群&#xff1a; 598778642 在开发Vue3项目的过程中&#xff0c;我们经常会使…

H5页面跳转微信小程序时:wx.miniProgram.navigateTo 报错 ‘wx‘ is not defined no-undef

有一个功能&#xff0c;需要从H5页面跳转到微信小程序&#xff0c;查了微信官方文档&#xff1a;只需要引入js文件&#xff0c;然后直接使用即可&#xff1a; 1&#xff1a;引用&#xff1a; 当然也可以下载下来直接引用项目具体位置的js文件 2: 使用&#xff1a; 然后一直报错…

vue3 hooks使用

vue3 hooks使用 今天我们稍微说一下 vue3 项目中的 hooks 的使用&#xff0c;其实这个 hooks 呢是和 vue2 当中的 mixin 是类似的&#xff0c;学习过 vue2 的小伙伴一定对 mixin 一定比较熟悉&#xff0c;就算没用过也一定了解过&#xff0c;也就是混入&#xff0c;通过 mixin …

useDark的使用方法以及Element-Plus深色主题切换案例(vue3)

useDark 顾名思义&#xff0c;是否使用深色模式&#xff0c;useDark它是通过读取localStorage/sessionStorage的存储值&#xff08;key 是可自定义的&#xff09;。从而设置html的class。VueUse的官方案例使用了Tailwind CSS 偏好的暗模式。因为我们不一定都用得到Tailwind CSS…

vue实现本地预览word(docx)、excel(xlsx)、pdf文件

vue实现本地预览word(docx)、excel(xlsx)、pdf文件 实现效果&#xff1a; 通过点击预览&#xff0c;浏览器打开新标签页展示文件内容 word效果&#xff1a; pdf效果&#xff1a; excel效果&#xff1a; 前期准备&#xff1a; word插件&#xff1a; npm install --save …

【TFS-CLUB社区 第5期赠书活动】〖Python OpenCV从入门到精通〗等你来拿,参与评论,即可有机获得

文章目录❤️‍&#x1f525; 赠书活动 - 《Python OpenCV从入门到精通》❤️‍&#x1f525; 编辑推荐❤️‍&#x1f525; 内容提要❤️‍&#x1f525; 赠书活动 → 获奖名单❤️‍&#x1f525; 赠书活动 - 《Python OpenCV从入门到精通》 内容简介&#xff1a; 《Python O…

【uniapp】页面下拉刷新

目录 一、全局 二、局部 1、一个页面一个下拉刷新 2、一个页面多个下拉刷新&#xff08;切换时滚动条回到顶部&#xff09; 3、一个页面多个下拉刷新&#xff08;切换时恢复滚动条位置&#xff09; 一、全局 修改pages.json的"enablePullDownRefresh": true, …