WangEditor — 一个轻量级富文本编辑器
官网:https://www.wangeditor.com/
介绍
在现代 Web 开发中,富文本编辑器是一个常见的工具,它允许用户输入、编辑和格式化内容。在众多富文本编辑器中,WangEditor 是一个轻量级、高效且易于使用的选择。它支持 HTML 格式的内容编辑,拥有直观的用户界面,广泛应用于博客平台、社交平台、内容管理系统等领域。
本文将详细介绍 WangEditor 的功能、使用方式、定制和扩展能力,帮助你了解如何高效地将其集成到你的项目中。
1. 什么是 WangEditor?
WangEditor 是一个基于 JavaScript 的富文本编辑器,它具有简单、清晰、易上手的特点。与其他重量级编辑器(如 CKEditor、TinyMCE)相比,WangEditor 具有更轻量的体积和更简洁的 API,适合用作 Web 开发中的富文本输入组件。
主要特点:
- 轻量级:WangEditor 的核心功能体积小,适合嵌入到各种 Web 应用中。
- 易于集成:支持直接引入 CDN 或通过 NPM 安装,并且配置简单,易于上手。
- 自定义扩展:支持插件机制,可以根据需求扩展各种功能。
- 跨平台支持:支持主流浏览器,并兼容 PC 和移动端。
- 丰富的功能:提供了常见的富文本编辑功能,如文本格式化、插入图片、视频、表情等。
2. 安装与集成
WangEditor 支持多种安装方式,最常见的是通过 NPM 和 CDN 方式进行集成。
2.1 通过 NPM 安装
npm install wangeditor
然后在 JavaScript 文件中导入:
import E from 'wangeditor'
2.2 通过 CDN 引入
<script src="https://cdn.jsdelivr.net/npm/wangeditor@latest/dist/wangEditor.min.js"></script>
3. 使用示例
3.1 基本使用
一旦集成成功,你就可以通过以下简单的代码创建一个基本的富文本编辑器:
<div id="editor-container"></div>
<script>const editor = new E('#editor-container');editor.create();
</script>
这段代码将会在页面上创建一个默认的编辑器,你可以直接在这个编辑区域进行文本输入、格式化以及插入图片、视频等。
3.2 配置选项
WangEditor 提供了多种配置选项,可以根据需求对编辑器进行定制。常见的配置项有:
- menus:设置可用的工具栏按钮,如加粗、斜体、插入图片等。
- placeholder:设置输入框的占位符。
- height:设置编辑器的高度。
- uploadImgMaxSize:限制上传图片的最大尺寸。
例如,设置一个带有图片上传功能的编辑器:
<div id="editor-container"></div>
<script>const editor = new E('#editor-container');// 配置上传图片功能editor.config.uploadImgShowBase64 = true; // 使用 base64 显示图片editor.config.menus = ['bold', 'italic', 'underline', 'fontSize', 'head', 'align', 'list', 'link', 'image'];editor.create();
</script>
3.3 图片上传
WangEditor 提供了图片上传的功能,可以通过配置自定义上传接口进行图片的上传处理。
editor.config.uploadImgServer = '/your/upload/image/api'; // 设置图片上传接口
editor.config.uploadImgMaxSize = 3 * 1024 * 1024; // 限制图片大小
editor.config.uploadImgTimeout = 5000; // 设置上传超时
如果不想使用服务器上传,可以选择将图片转换为 Base64 格式。
editor.config.uploadImgShowBase64 = true;
4. 自定义功能与插件扩展
WangEditor 支持通过插件机制来扩展功能。你可以自定义工具栏按钮、事件或功能模块,满足更复杂的应用需求。
4.1 自定义按钮
你可以通过 editor.config.menus
配置自定义按钮。
例如,添加一个自定义的按钮:
editor.config.menus = ['bold', 'italic', 'underline', 'image', 'myCustomButton'
];// 添加自定义按钮
editor.config.customMenus = [{key: 'myCustomButton',title: 'My Custom Button',icon: '<i class="fa fa-star"></i>',action: function() {alert('My custom button clicked!');}}
];
4.2 自定义插入模块
WangEditor 允许用户通过 editor.cmd
对文档进行插入操作。例如,插入一个表情符号模块。
editor.cmd.do('insertHTML', '<img src="path_to_emoji.png" />');
4.3 插件机制
WangEditor 还提供了插件机制,可以很方便地加载第三方插件。
import { customPlugin } from 'custom-plugin';
editor.config.customPlugin = customPlugin;
editor.create();
5. 常见问题与解决方案
5.1 编辑器内容丢失
如果你的页面使用了动态数据填充编辑器内容,确保使用 editor.txt.html()
方法获取或设置内容:
// 获取编辑器内容
const htmlContent = editor.txt.html();// 设置编辑器内容
editor.txt.html('<p>新的内容</p>');
5.2 上传图片失败
上传图片失败可能是由于跨域问题或接口设置错误。确保你的图片上传接口支持跨域请求,并且正确设置了 Access-Control-Allow-Origin
头。
5.3 自定义功能不生效
如果你添加了自定义功能(如自定义按钮或菜单),但它们没有显示或没有响应,检查以下几点:
- 确保
menus
配置项中包含你的自定义按钮。 - 确保在
create()
方法之前正确配置编辑器。
6. 总结
WangEditor 是一个高效、轻量、易用的富文本编辑器,非常适合用于现代 Web 开发中。它不仅支持基础的文本编辑功能,还提供了丰富的配置和插件扩展机制,能够满足大部分开发需求。无论你是在开发博客平台、内容管理系统,还是在线富文本编辑器,WangEditor 都是一个值得考虑的优秀选择。
希望本文能够帮助你深入理解 WangEditor,快速将其集成到你的项目中,实现更好的用户体验。
相关文章:
WangEditor — 一个轻量级富文本编辑器
官网:https://www.wangeditor.com/ 介绍 在现代 Web 开发中,富文本编辑器是一个常见的工具,它允许用户输入、编辑和格式化内容。在众多富文本编辑器中,WangEditor 是一个轻量级、高效且易于使用的选择。它支持 HTML 格式的内容编…...
Redis 之持久化
目录 介绍 RDB RDB生成方式 自动触发 手动触发 AOF(append-only file) Redis 4.0 混合持久化 Redis主从工作原理 总结 介绍 Redis提供了两个持久化数据的能力,RDB Snapshot 和 AOF(Append Only FIle)…...
Scala的模式匹配
package hfdobject Test34 {def main(args: Array[String]): Unit {//身份证val id "429005202023210042"// val id "319005202023210042"// val id "119005202023210042"//val id "339005202023210042"//截取前两位val pre id.sub…...
学习笔记052——Spring Boot 自定义 Starter
文章目录 Spring Boot 自定义 Starter1、自定义一个要装载的项目2、创建属性读取类 ServiceProperties3、创建 Service4、创建自动配置类 AutoConfigration5、创建 spring 工程文件6、将项目打成 jar 包7、jar 打包到本地仓库8、配置application.yml Spring Boot 自定义 Starte…...
react学习记录Day2
Materal UI组件 1、Typography 文字铸排 使用文字铸排可以尽可能清晰、高效地展示您的设计和内容。 2、useTranslation 在React应用程序中,国际化(i18n)通常是通过使用专门的库来实现的,其中一个流行的库是react-i18next。这个…...
4. STM32_定时器
概述 什么是定时器: 定时器核心就是计数器,是使用精准的时基,通过硬件的方式,实现定时功能的器件。 定时器的工作原理: 主频时钟CLK通过PSC进行分频后产生定时器时钟TIM CLK,计数器CNT根据TIM CLK的频率…...
JMeter中获取随机数、唯一ID、时间日期(包括当前日期增减)截取指定位数的字符等
在JMeter中,您可以使用内置的函数和一些额外的插件来获取随机数、唯一ID、时间日期以及截取指定位数的字符。以下是一些常用的方法: 获取随机数: 使用__Random函数,您可以在指定的最小值和最大值之间生成一个随机数。例如…...
Windows下从命令行(Powershell/CMD)发送内容到系统通知中心
Windows下从命令行(Powershell/CMD)发送内容到系统通知中心 01 前言 在平时写脚本的时候,将日志等信息直接输出到控制台固然是最直接的,而如果是一些后台执行的任务,不需要时刻关注运行细节但是又想知道一些大致的情…...
day01-搭建项目环境
1. 项目介绍 1.1 项目亮点 1.2 技术架构 2. 搭建环境 启动老师提供的虚拟机,里面常用的组件是开机启动的。 本地访问一些组件时需要手动敲写ip地址和组件端口,在本地的host文件中添加虚拟机的地址,而且虚拟机中有nginx反向代理,…...
使用Tauri创建桌面应用
当前是在 Windows 环境下 1.准备 系统依赖项 Microsoft C 构建工具WebView2 (Windows10 v1803 以上版本不用下载,已经默认安装了) 下载安装 Rust下载安装 Rust 需要重启终端或者系统 重新打开cmd,键入rustc --version,出现 rust 版本号&…...
MySQL 函数创建中的 Err 1418:原因解析与解决指南20241203
🚨 MySQL 函数创建中的 Err 1418:原因解析与解决指南 📖 引言 在使用 MySQL 创建函数时,许多开发者会偶然遇到如下报错: [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its…...
GPT 1到4代的演进笔记
1. GPT-1 标题是 Improving Language Understanding by Generative Pre-Training. 发表于 2018.02, 比 bert(发布于 2018.10) 早了半年. 1.1 动机 困难:NLU 任务是多样的, 有 {textual entailment, question answering, semantic similarity assessment, document classifica…...
Zookeeper集群数据是如何同步的?
大家好,我是锋哥。今天分享关于【Zookeeper集群数据是如何同步的?】面试题。希望对大家有帮助; Zookeeper集群数据是如何同步的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper集群中的数据同步是通过一种称为ZAB(Zo…...
vue初始化脚手架
Vue初始化脚手架是指使用Vue CLI(Command Line Interface)工具来创建一个Vue项目的基础结构。Vue CLI是Vue.js官方提供的一个脚手架工具,它可以帮助开发者快速搭建Vue项目的基本框架,包括目录结构、配置文件、依赖管理等。 1. 初始…...
可编程网络在分布式深度学习通信瓶颈控制中的应用与未来展望
目录 可编程网络技术解决分布式深度学习通信瓶颈 1. 网络内聚合原语加速分布式深度学习 2. 流聚合与网络内数据处理设计 3. 可编程数据平面加速 4. 降低通信发生的频次 5. 使用大批量进行训练 可编程网络 可编程性定义 在大语言模型中的应用 举例说明: 可编程网络在…...
【教学类-43-25】20241203 数独3宫格的所有可能-使用模版替换(12套样式,空1格-空8格,每套510张,共6120小图)
前期做数独惨宫格的所有排列,共有12套样式,空1格-空8格,每套510张,共6120小图) 【教学类-43-24】20241127 数独3宫格的所有可能(12套样式,空1格-空8格,每套510张,共6120…...
组合问题变式——选数(dfs)
代码随想录听课笔记1——回溯算法-CSDN博客 这是从1,2,3...,n个数字中选出k个数的组合,输出组合的全部可能的代码 //组合:返回1-n中所有个数为k的组合 1,2,3,4 #include<bits/stdc.h> using namespace std; #define MAX 1…...
怎麼解決路由器IP地址衝突?
路由器IP地址衝突通常發生在網路中有兩個設備嘗試使用相同的IP地址時。這種衝突會導致網路連接問題,因為每個設備需要一個唯一的IP地址才能正常通信。 1. 重啟設備 重啟路由器和設備:有時候簡單的重啟可以解決問題,設備重新獲取一個新的IP地…...
【Flink】Flink 作业执行大致流程
Flink 作业执行流程 (Application 模式) 客户端通过 ClusterDescriptor 提交 Application 模式 Sql 任务到服务端,服务端调用作业时 StreamTableEnvironment 使用 FlinkSqlParser 将 SQL 转换为 Operation , StreamTableEnvironment 转换 SQL 过程中使用 CatalogSou…...
mdf文件数据处理之画图(subplots多信号展示同一张图中)
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
python基础知识(一)
文章目录 基础语法注释多行语句数字(Number)类型字符串(String)字符串常用方法字符串格式化 import与from...import 基本数据类型多个变量赋值标准数据类型 运算符算术运算符赋值运算符逻辑运算符成员运算符身份运算符 基础语法 注释 python注释可以使用#,或者三个…...
解决 Flutter Dio合并请求多个接口,如果一个接口500,那么导致其他请求不在执行
Flutter Dio如何自定义拦截异常 应用场景 我们一般会统一拦截DioExceptionType 如400,403,500 等错误 但有时候,有个地方合并请求多个接口,如果一个接口500,那么导致其他请求不在执行,因为统一拦截了500&…...
RPC一分钟
概述 微服务治理:Springcloud、Dubbo服务通信:Grpc、Trift Dubbo 参考 Dubbo核心功能,主要提供了:远程方法调用、智能容错和负载均衡、提供服务自动注册、自动发现等高效服务治理功能。 Dubbo协议Dubbo支持dubbo、rmi、http、…...
CentOS 7 docker部署jar包
1、创建Dockerfile vim Dockerfile2、编辑内容 # 基础镜像 FROM openjdk:8 # 作者或联系方式 MAINTAINER wq # test为别名 ADD erp-1.0.jar /test.jar # 容器暴露端口 EXPOSE 8081 ENTRYPOINT ["java","-jar","test.jar"]3、生成镜像 docker …...
高性能mysql 1
高性能mysql 1 参考: 博客 https://segmentfault.com/a/1190000040374142书籍📚’High performance mysql’ I note some hard part ,translating it into Chinese for a better comprehensionsometimes when I have some trouble with reading En…...
QT发布ArcGIS QML项目时遇到的问题
在打包 ArcGIS Runtime SDK for Qt 项目时,如果项目中没有正确显示地图或者图层,且在项目的 DLL 依赖中没有找到与 ArcGIS SDK 相关的依赖,可能是由于以下几种原因导致的: 1. 未正确配置 ArcGIS SDK 的依赖 ArcGIS Runtime SDK …...
高校数字化运营平台解决方案:构建统一的服务大厅、业务平台、办公平台,助力打造智慧校园
教育数字化是建设教育强国的重要基础,利用技术和数据助推高校管理转型,从而更好地支撑教学业务开展。 近年来,国家多次发布政策,驱动教育行业的数字化转型。《“十四五”国家信息化规划》,推进信息技术、智能技术与教育…...
cocotb value cocotb—基础语法对照篇
cocotb—基础语法对照篇 import cocotb from cocotb.triggers import Timer from adder_model import adder_model from cocotb.clock import Clock from cocotb.triggers import RisingEdge import randomcocotb.test() async def adder_basic_test(dut):"""Te…...
LLM与动态符号执行生成测试用例的比较
LLM与动态符号执行生成测试用例的比较 在软件测试领域,生成有效的测试用例是确保软件质量和可靠性的关键步骤。近年来,大型语言模型(Large Language Models,LLM)和动态符号执行(Dynamic Symbolic Executio…...
torchvison.models中包含的哪些模型?
1.模型 Alexnet AlexNet 是一个具有 8 层的深度卷积神经网络,结构上比早期的卷积神经网络(如 LeNet)要深得多。它由 5 个卷积层(conv layers)和 3 个全连接层(fully connected layers)组成。Al…...
安装v2x,使用docker安装deepstream,安装v2x步骤,并使用tritonServer进行推理步骤,以及避坑问题
1,安装步骤 大致分为下面的安装过程: a 安装docker,b 本地安装环境,c 拉取docker镜像,d,本地下载数据 e,移动数据到docker下目录,f,docker下解压数据,g,docker下engine化数据,h,docker下编译v2x并运行离线数据,r,rtsp数据流替换并运行 To install these packages…...
2022 年 6 月青少年软编等考 C 语言三级真题解析
目录 T1. 制作蛋糕思路分析T2. 找和最接近但不超过K的两个元素思路分析T3. 数根思路分析T4. 迷信的病人思路分析T5. 算 24思路分析T1. 制作蛋糕 小 A 擅长制作香蕉蛋糕和巧克力蛋糕。制作一个香蕉蛋糕需要 2 2 2 个单位的香蕉, 250 250 250 个单位的面粉, 75 75 75 个单位的…...
java opcua server服务端开发 设置用户密码访问
前言 关于使用milo开源库,开发opc ua服务器,之前的教程中,都是使用的匿名访问,有网友咨询如何设置服务端使用用户密码访问,于是我完善了这部分的空缺整理整了这篇教程,希望能解决有同样需求,但是遇到困难的网友!因为milo没有官方文档的教程且网上详细的教程很少,本人…...
SQLite:DDL(数据定义语言)的基本用法
SQLite:DDL(数据定义语言)的基本用法 1 主要内容说明2 相关内容说明2.1 创建表格(create table)2.1.1 SQLite常见的数据类型2.1.1.1 integer(整型)2.1.1.2 text(文本型)2…...
Spring-Smart-DI !动态切换实现类框架
背景 一般我们系统同一个功能可能会对接多个服务商,防止某个服务商的服务不可用快速切换或者收费不同需要切换,那我们一般做快速切换逻辑传统无非就是先将每个服务商实现,然后在配置点(数据库或者nacos)配置当前正在使…...
【SCT71401】3V-40V Vin, 150mA, 2.5uA IQ,低压稳压器,替代SGM2203
SCT71401 3V-40V Vin, 150mA, 2.5uA IQ,低压稳压器,替代SGM2203 描述 SCT71401系列产品是一款低压差线性稳压器,设计用于3 V至40 V (45V瞬态输入电压)的宽输入电压范围和150mA输出电流。SCT71401系列产品使用3.3uF…...
浅谈网络 | 应用层之流媒体与P2P协议
目录 流媒体名词系列视频的本质视频压缩编码过程如何在直播中看到帅哥美女?RTMP 协议 P2PP2P 文件下载种子文件 (.torrent)去中心化网络(DHT)哈希值与 DHT 网络DHT 网络是如何查找 流媒体 直播系统组成与协议 近几年直播比较火,…...
Brain.js(六):构建FNN神经网络实战教程 - 用户喜好预测
在前文不同的神经网络类型和对比 针对不同的神经网络类型做了对比,本章将对FNN稍作展开 测试环境: chrome 版本 131.0.6778.86(正式版本) (64 位) 一、引言 Brain.js 是一个简单易用的 JavaScript 神经网…...
重学设计模式-建造者模式
本文介绍一下建造者模式,相对于工厂模式来说,建造者模式更为简单,且用的更少 定义 建造者模式是一种创建型设计模式,它使用多个简单的对象一步一步构建成一个复杂的对象。这种模式的主要目的是将一个复杂对象的构建过程与其表示…...
linux下c++调用opencv3.4.16实战技巧
目录 参考:在图像上绘框在图像上绘圆在图像上绘文字在图像上绘制线灰度图rgb转yuvOpenCV 读取视频,设置起始帧、结束帧及帧率获取(1.1)简介(1.2)Mat类型(1.3)IplImage类型将OpenCV抓拍的图片进行x264编码并保存到文件c++调用opencv,读取rtsp视频流参考: https://blog…...
记录css模糊程度的属性
记录需要模糊以及透明化图片需求: opacity: (0到1之间数字,dom透明程度)。 filter: blur() 括号里需数字,单位为px,值越大模糊程度越大。 关于css中filter属性记录 filter 滤镜属性: blur&…...
K8S的监控与告警配置有哪些最佳实践
在 Kubernetes (K8s) 集群中实现有效的监控与告警是确保集群稳定性、性能以及及时响应潜在问题的关键。以下是 K8s 监控与告警配置的最佳实践,涵盖了监控工具的选择、告警规则的配置、数据存储与可视化等方面。 1. 选择合适的监控工具 Kubernetes 生态系统有多种监…...
如何在Ubuntu 20.04上安装和使用PostgreSQL:一步步指南
如何在Ubuntu 20.04上安装和使用PostgreSQL:一步步指南 在Ubuntu 20.04上安装和使用PostgreSQL数据库包括几个明确的步骤:安装、配置、创建用户和数据库、以及基本的数据库操作。下面,我将详细解释每个步骤,并提供具体的命令行示…...
PostGis学习笔记
– 文本方式查看几何数据 SELECT ST_AsText(geom)FROM nyc_streets WHERE name ‘Avenue O’; – 计算紧邻的街区 SELECT name,ST_GeometryType(geom) FROM nyc_streets WHERE ST_DWithin( geom,ST_GeomFromText(‘LINESTRING(586782 4504202,586864 4504216)’,26918),0.1); …...
JDK17 线程池 ThreadPoolExecutor
文章目录 线程池ThreadPoolExecutor状态向线程池添加任务 executeWorker线程池新建工作线程 addWorker 拒绝策略 线程池 线程池将创建线程和使用线程解耦。优点是 避免重复创建和销毁线程,降低资源消耗。任务不用等待创建线程的时间,提高响应速度。统一…...
Dify+Docker
1. 获取代码 直接下载 (1)访问 langgenius/dify: Dify is an open-source LLM app development platform. Difys intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, …...
分布式会话 详解
分布式会话详解 在分布式系统中,用户的会话状态需要在多个服务器或节点之间共享或存储。分布式会话指的是在这种场景下如何管理和存储会话,以便在多个节点上都能正确识别用户状态,从而保证用户体验的一致性。 1. 为什么需要分布式会话 在单…...
Java进阶
Java进阶 java注解 java中注解(Annotation),又称为java标注,是一种特殊的注释,可以添加在包,类,成员变量,方法,参数等内容上面.注解会随同代码编译到字节码文件中,在运行时,可以通过反射机制获取到类中的注解,然后根据不同的注解进行相应的解析. 内置注解 Java 语言中已经定…...
Qt/C++实现帧同步播放器/硬解码GPU绘制/超低资源占用/支持8K16K/支持win/linux/mac/嵌入式/国产OS等
一、前言 首先泼一盆冷水,在不同的电脑上实现完完全全的帧同步理论上是不可能的,市面上所有号称帧同步的播放器,同一台电脑不同拼接视频可以通过合并成一张图片来绘制实现完完全全的帧同步,不同电脑,受限于网络的延迟…...
hhdb数据库介绍(10-33)
管理 数据归档 归档记录查询 功能入口:“管理->数据归档->归档记录查询” 需要确保配置的归档用户对数据归档规则所在的逻辑库具备CREATE权限,以及对原数据表具有所有权限。 清理归档数据 (一)功能入口:“…...