当实现基于Web的富文本编辑器时,我读到document.execCommand
对于在HTML文档上执行操作非常有用(例如使选择变为粗体)。但是,我需要更好的东西。具体来说,我需要确切地知道在innerHTML中添加或删除了什么文本,以及在什么位置(作为对整个文档HTML表示的偏移)。
我考虑过将内置document.execCommand与DOM4的变异观察器一起使用,但是execCommand似乎不适合该任务:
另外,根据我的需求,使用突变观察器似乎有些过高。
我的动力:我试图将文档更改定期发送到服务器,而不重新发送整个文档。我将数据发送为HTML表示形式上的插入和删除的集合。如果有人知道从CKEditor中获得此功能的方法(因此我不必从头开始),那么我会永远爱你。
注意:由于在大型文档上的性能较差,因此无法执行文本差异。
否则,我并不完全害怕尝试编写能够做到这一点的东西。 DOM的range对象提供的方法将处理很多繁重的工作。我也很感谢有关这种可能性的建议。
最佳答案
有一种使用execCommand的替代方法-实现编辑器的整个交互,包括光标闪烁。它已经完成了。 Google在文档中做到了这一点,但也有一些免费和开源的工具。 Cloud9 IDE http://c9.io具有一个实现。
AFAIK,github现在使用该编辑器已有一段时间了。而且您肯定可以在此基础上做任何事情,因为不涉及 native 代码,例如execCommand
仓库在这里:https://github.com/ajaxorg/cloud9(它包含整个IDE,您将需要找到编辑器的代码。)
而且-不建议使用dom突变事件。如果您可以放弃对旧浏览器的支持,请尝试mutation observer。如果不是,请尝试避免根本检测到DOM更改,并拦截编辑器实现中的更改。也可能是新浏览器的使用方式。
关于javascript - 有什么比document.execCommand好吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12251629/