1.极简实现
当前chrome浏览器提供最简单是用方式,一个是给盒子添加contentEditable属性,另一个是在文档加载完毕手动设置编辑模式,即:document.designMode = 'on'
1. <div contentEditable></div>
2. <script>document.designMode = 'on'</script>
浏览器自带功能,大多数浏览器均可以正常使用。
1.1 编辑内容
- 相当于直接将元素视为文本输入框,可以自由编辑html文档,富文本的内容即为
html string。 - 由于多数情况下,在富文本编辑之后需要存储并需要保留格式,因此多数富文本均为行内样式,即
inline style。
1.2 操作流程
开启编辑模式→编辑富文本对象→获取富文本html字符串→保存→展示
1.3 编辑API-document.execCommand
document.execCommand(cName, boolearn, argument)
- 命令的名称
- 是否展示用户界面
- 命令的参数
注:对于这些命令的使用需要根据语义或api详细说明的动作下
developer.mozilla.org/zh-CN/docs/…
1.4 写在中间-execCommand问题
- 不够灵活,无法定制,如:元素添加
class - 生成
b,font等不够简洁的、语义化的、现代化的tag - 诸多的不兼容性
1.5 选区API-Range
绕不开的选区range
1.document.createRange
2.window.selection
developer.mozilla.org/zhCN/docs/W…
2.模拟实现
即通过常用元素结合自定义API模拟输入模式,一个完整的符合操作习惯的eidtor应包含以下方面:
- 操作按钮面板
toolbar - 内容区基本的新增、修改、删除
addinsertupdatedelete - 元素的对齐方式、间距、背景
verticlemarginpaddingbackground - 文本的格式
text - 超链接的处理
link - 多媒体信息的支持
videoaudio - 上传功能
img - 撤销、恢复
redoundo - 格式刷
style copy - 常用按键的支持
event - 具有可扩展性等
extend
2.1模拟编辑器
2.2模拟编辑器
此架构下的编辑器模拟对象有: 模拟可输入的输入框、模拟光标、模拟选区、模拟浏览器指令、模拟事件、自定义扩展
2.3模拟编辑器实例
wangEditor、禅道kindeditor、CKEditor、confluence
附加了解 实时文档协作:Websocket,非必须但是趋势