返回

点亮指尖,挥洒创意:亲手打造专属富文本编辑器

前端

手写 H5/uniapp 专属富文本编辑器:释放创造力的技术突破

赋能标签,释放潜能

踏上创建专属富文本编辑器的旅程,第一步是为目标标签赋予可编辑的能力。为此,我们使用了 contentEditable 属性。这个神奇的属性赋予元素可编辑性,就像你用文本编辑器编辑文本一样。

<div contentEditable="true">
  //可编辑内容
</div>

兼容之选,iOS 特殊

苹果系统对 contentEditable 属性情有独钟,需要额外的兼容处理。我们加上 -webkit-user-select: text; 样式,让 iOS 设备也能享受编辑的乐趣。

div[contentEditable="true"] {
  -webkit-user-select: text;
}

内置魔法,innerHTML 妙用

有了 contentEditable 的加持,我们可以使用 innerHTML 属性来操控编辑内容。这个属性就像是文本编辑器的操控棒,让我们可以轻松编辑文本,就像在文本编辑器中操作一样。

// 获取可编辑元素
const editor = document.querySelector('[contentEditable="true"]');

// 设置内容
editor.innerHTML = '欢迎来到你的专属编辑器!';

// 获取内容
const content = editor.innerHTML;

总结要点,实现功能

通过以上步骤,我们构建了一个基本的可编辑富文本编辑器,它具备以下功能:

  • 文本编辑: 直接在标签内进行文本编辑,无须其他操作。
  • 内容读取: 通过 innerHTML 获取编辑后的内容。
  • 内容设置: 通过 innerHTML 设置编辑器中的内容。

扩展进阶,功能升级

基础编辑器完成,接下来让我们赋予其更强大的功能,释放你的创造力。

  • 加粗、斜体、下划线: 运用 execCommand() 方法,轻松实现文本加粗、斜体、下划线等格式化效果。
  • 插入链接: 同样使用 execCommand() 方法,为选中文本添加链接。
  • 有序、无序列表: 插入有序、无序列表,丰富文本结构。
  • 撤销、重做: 使用 document.execCommand('undo')document.execCommand('redo') 实现撤销、重做功能。

保存编辑,持久记录

最后,我们为编辑器增添保存功能,让你的心血不随刷新而逝。

// 保存按钮点击事件
const saveButton = document.querySelector('#saveButton');
saveButton.addEventListener('click', () => {
  // 获取编辑内容
  const content = editor.innerHTML;
  
  // 保存到本地存储或数据库
  // ... 保存操作
  
  alert('内容已保存!');
});

延伸阅读:

常见问题解答:

1. 如何在编辑器中插入图片?

  • 使用 execCommand('insertImage', false, '图片地址') 方法插入图片。

2. 如何在编辑器中创建表格?

  • 使用 execCommand('insertTable', false, '行数', '列数') 方法创建表格。

3. 如何禁用编辑器中的某些功能,如加粗或斜体?

  • 使用 document.execCommand('styleWithCSS', false, '加粗或斜体样式') 方法禁用特定样式。

4. 如何在编辑器中实现粘贴纯文本?

  • 使用 document.execCommand('paste', false, null, 'text/plain') 方法粘贴纯文本。

5. 如何在编辑器中设置默认内容?

  • 在加载时使用 editor.innerHTML = '默认内容' 设置默认内容。