标准答案

  1. contenteditable 让元素内容可以被用户直接编辑,适合非常轻量的内联编辑。
  2. 复杂场景会遇到粘贴污染、XSS、光标丢失、输入法组合、撤销栈和浏览器差异。
  3. 用户粘贴的 HTML 必须清洗,不能直接保存或渲染。
  4. 富文本编辑通常需要独立文档模型,把用户操作映射成受控的数据结构。
  5. 实际项目常用 ProseMirror、TipTap、Slate、Lexical 等编辑器框架,而不是裸用 contenteditable。

题目解析

这题要体现风险意识。contenteditable 看起来简单,但真正难的是输入行为和数据模型。

富文本不是“一个可编辑 div”,而是一套编辑、序列化、清洗、协作和回显体系。

代码示例

轻量编辑可以用 contenteditable,但保存前必须处理输入内容。

HTML
<div contenteditable="true" aria-label="备注">
  可以编辑这段备注
</div>

常见误区

  • 直接保存 innerHTML,导致 XSS 和脏样式进入系统。
  • 忽略输入法组合事件,中文输入时状态更新异常。
  • 用简单 div 试图实现复杂富文本,后续撤销、选区和协作都难维护。

作者信息