在实现基于web的富文本编辑器时,我看到document.execCommand对于对HTML执行操作非常有用(比如选择粗体)。不过,我需要一些更好的东西。具体来说,我需要确切地知道从innerHTML中添加或删除了什么文本,以及在哪个位置(作为对整个文档的HTML表示的偏移量)。
我考虑在DOM4 4的突变观察器旁边使用内置的document.execCommand,但execCommand似乎不能胜任这项任务:
而且,根据我的需要,使用变异观察者似乎有点过分。
我的动机是:我试图定期地将文档更改传输到服务器,而不重新传输整个文档。我将数据作为HTML表示上的插入和删除的集合发送。如果有人知道如何摆脱这个功能,比如CKEditor (所以我不需要从头开始),那么我将永远爱你。
注意:执行文本差异不是一个选项,因为它在非常大的文档上性能很差。
否则,我并不害怕尝试写这样的东西。DOM的range对象提供的方法将处理大量的繁重工作。我也希望得到关于这种可能性的建议。
发布于 2012-09-16 21:17:18
除了使用execCommand之外,还有一种选择--实现编辑器的整个交互,包括光标的闪烁。而且已经做到了。谷歌在文档中这样做,但也有一些免费和开源的东西。Cloud9 IDE http://c9.io有一个实现。AFAIK,github使用这个编辑器已经有一段时间了。在这种情况下,您当然可以做任何事情,因为在execCommand中不涉及任何本机代码。
回购程序在这里:https://github.com/ajaxorg/cloud9 (它包含整个IDE,您需要为编辑器找到代码。)
同样的突变事件是不推荐的。如果可以删除对旧浏览器的支持,请尝试突变观测器。如果没有,请尽量避免检测DOM更改,并拦截编辑器实现中的更改。这可能也是新浏览器的发展方向。
发布于 2017-11-30 20:33:41
有特里克斯富文本编辑器,从他们的描述来看,避免不一致的execCommand是整个项目的重点。
发布于 2021-01-21 21:06:49
看来新的标准将是输入事件级别2。在我看来,这将是execCommand的一个改进版本。
https://stackoverflow.com/questions/12251629
复制相似问题