国产开源富文本编辑器 wangEditor,本姓编辑器

关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言

上一节介绍了轻量级的富文本编辑器,基本上已经可以满足了日常的使用。又发现一款国产的编辑器wangEditor,因为我也姓wang,本姓的富文本编辑器必须了解一下。

02 简介

wangEditor 是国产开源富文本编辑器,专为国内开发者设计。

GitHubstar数高达18.3k

03 快速开始

2.1 引入JS和CSS

javascript 复制代码
<link href="https://unpkg.com/@wangeditor/editor@latest/dist/css/style.css" rel="stylesheet"/>
  <style>
	  #editor---wrapper {
		border: 1px solid #ccc;
		z-index: 100; /* 按需定义 */
	  }
	  #toolbar-container {
		border-bottom: 1px solid #ccc;
	  }
	  #editor-container {
		height: 500px;
	  }
  </style>

<!-- 引入 JS -->
<script src="https://unpkg.com/@wangeditor/editor@latest/dist/index.js"></script>

2.2 Html结构

html 复制代码
<div id="editor---wrapper">
	<div id="toolbar-container"><!-- 工具栏 --></div>
	<div id="editor-container"><!-- 编辑器 --></div>
</div>

2.3 初始化

javascript 复制代码
  const { createEditor, createToolbar } = window.wangEditor

  const editorConfig = {
    placeholder: '<p>请输入内容...</p>',
    onChange(editor) {
      const html = editor.getHtml()
      console.log('editor content', html)
      // 也可以同步到 <textarea>
    },
    MENU_CONF: {
      // 配置图片上传  
      uploadImage: {
        server: '/api/upload-image',
        fieldName: 'file',
        maxFileSize: 5 * 1024 * 1024,
        onSuccess(file, res) {
          console.log('上传成功')
        },
        onFailed(file, res) {
          alert('上传失败')
        }
      }
    }
  }

  const editor = createEditor({
    selector: '#editor-container',
    html: '<p><br></p>',
    config: editorConfig,
    mode: 'default', // or 'simple'
  })

  const toolbarConfig = {}

  const toolbar = createToolbar({
    editor,
    selector: '#toolbar-container',
    config: toolbarConfig,
    mode: 'default', // or 'simple'
  });

工具栏的模式有两种:

  • default:默认模式 - 集成了 wangEditor 所有功能
  • simple: 简洁模式 - 仅有部分常见功能,但更加简洁易用

2.4 效果

默认模式

简介模式

图片上传

请求已发出

04 常用API

4.1 获取/设置内容

javascript 复制代码
// 获取 HTML 内容
const html = editor.getHtml()

// 获取纯文本
const text = editor.getText()

// 设置 HTML 内容
editor.setHtml('<p>新内容</p>')

// 清空内容
editor.clear()

// 获取 JSON 内容(用于保存)
const content = editor.children

4.2 焦点与禁用

javascript 复制代码
// 获取焦点
editor.focus()

// 失去焦点
editor.blur()

// 是否可编辑
editor.enable()
editor.disable()

4.3 内容监听

javascript 复制代码
// 内容变化时触发
editor.on('change', () => {
  console.log('内容变化', editor.getHtml())
})

05 常见问题

5.1 图片上传后不显示

  • 检查返回格式:{ errno: 0, data: { url: '图片地址' } }
  • 确认图片地址可访问
  • 检查静态资源映射是否正确

5.2 工具栏不显示

  • 确认 CSS 已引入
  • 检查容器 ID 是否正确

5.3 获取内容为空

  • 确保编辑器已初始化完成
  • 使用 editor.getHtml() 获取

06 版本说明

版本 说明
v4 旧版本,不推荐新项目使用
v5 当前版本,基于 slate.js 重写,推荐使用
相关推荐
信誓旦旦的程序猿42 分钟前
【量化系统从零构建 #04】存储设计:选型·建库·交易日历
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
yurenpai(27届找实习中)42 分钟前
Java 10 的 var 为什么不能随便用?从订单汇总看懂类型推断与泛型陷阱
java·开发语言·java18
geovindu1 小时前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
Flynt2 小时前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端
IT_陈寒2 小时前
Redis误用keys命令把生产环境搞崩了,血的教训
前端·人工智能·后端
Tangyuewei2 小时前
给老 Spring 项目装个 AI Agent
java·人工智能·spring
她的男孩2 小时前
多租户和数据权限怎么共存?扒完拦截器注册链路,我找到 4 个隐蔽的坑
java·后端·架构
kyriewen2 小时前
我用 AI 写完一个需求后才发现,最难的不是 prompt,而是验收
前端·程序员·ai编程
用户8356290780513 小时前
使用 Python 设置 Excel 页眉和页脚
后端·python
步行cgn3 小时前
IoC 控制反转:从概念到 Spring 的实现
后端