Web 富文本编辑器的发展史,本质上是一场关于控制权的争夺。浏览器厂商、框架作者、产品经理,都在争夺同一个问题的答案:谁来决定「光标在这里时,按下回车会发生什么」。

contentEditable 的原罪

最早,浏览器给了一个叫 contentEditable 的属性。把它加在任意元素上,那块区域就「能编辑」了。

听起来很美好,但每个浏览器对它的实现都不一样。同样按一次回车,有的插 <br>,有的插 <div>,有的插 <p>。富文本编辑器的前半部历史,几乎都在替浏览器擦屁股。

从 DOM 到数据模型

转折点是大家意识到:不能再信任 DOM 了。

现代编辑器(如 ProseMirror、Slate)的思路是——维护一份自己的数据模型,DOM 只是这份模型的「投影」。用户的每一次输入,先改模型,再由模型决定 DOM 长什么样。

控制权,终于从浏览器手里夺了回来。