有什么比document.execCommand更好的东西吗
Is there something better than document.execCommand?
在实现基于web的富文本编辑器时,我了解到document.execCommand
对于在HTML文档上执行操作(如加粗选择)非常有用。不过,我需要一些更好的东西。具体来说,我需要确切地知道从innerHTML中添加或删除了什么文本,以及在什么位置(作为整个文档HTML表示的偏移量)。
我考虑使用内置的document.execCommand和DOM4的突变观测器,但execCommand似乎无法完成任务:
- 我看不出有什么方法可以"取消粗体"选择
- 生成的html似乎因浏览器而异。(我希望标签不是<b>,但一致性更重要)
- 并且没有关于它如何处理冗余嵌套/相邻<span>标签
此外,根据我的需要,使用突变观测器似乎有点过头了。
我的动机是:我尝试定期将文档更改传输到服务器,而不重新传输整个文档。我将数据作为HTML表示中插入和删除的集合发送。如果有人知道如何从CKEditor中获得这一功能(这样我就不必从头开始了),那么我会永远爱你。
注意:执行文本差异不是一个选项,因为它在非常大的文档上性能很差。
否则,我并不害怕写这样的东西。DOM的range对象提供的方法将处理大量繁重的工作。我也很感激关于这种可能性的建议。
有一种使用execCommand的替代方案-实现编辑器的整个交互,包括闪烁光标。它已经完成了。谷歌在文档中这样做,但也有一些免费和开源的东西。Cloud9 IDEhttp://c9.io有一个实现。AFAIK,github使用该编辑器已经有一段时间了。在这种情况下,你肯定可以做任何事情,因为没有涉及到本机代码——比如execCommand
回购在这里:https://github.com/ajaxorg/cloud9(它包含整个IDE,您需要找到编辑器的代码。)
此外,不赞成使用-dom突变事件。如果您可以放弃对旧浏览器的支持,请尝试mutation observer。如果没有——尽量避免检测DOM更改,并在编辑器的实现中截取更改。这可能也是新浏览器的发展方向。
有一个Trix富文本编辑器,从它们的描述来看,它似乎避免了不一致的execCommand是项目的重点。
似乎新的标准将是输入事件级别2。对我来说,它看起来像是execCommand的一个改进版。
- 有没有更好的动手、具体的方法来学习Javascript
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 设置嵌套对象属性的更好方法
- 您有更好的动态方式来缩短复杂的代码jquery吗
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 什么更好?使用iframe或jQuery之类的东西在外部网站中加载HTML文件
- 将数组从javascript格式化为php的更好方法,反之亦然
- jquery:将动画绑定到滚动条位置的更好方法
- 有更好的方法吗?(递归解析HTML unicode实体)
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 有什么比document.execCommand更好的东西吗
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 编写if-else语句的更好方法
- 我能从“;输入“;事件是否有更好的方法来跟踪文本更改
- 更好的解决方案HTML元素幻灯片从右侧CSS转换