如何使用jQuery移除Ace编辑器中的高亮标记?
解决Ace编辑器行高亮标记无法移除的问题
我完全懂你现在的困扰——给Ace编辑器加了行高亮后,不管是重置内容、重载还是重新初始化编辑器,那个高亮就是顽固地留在那里,用jQuery或者网上找的AngularJS方案都搞不定,确实头疼!
问题出在你之前只调用了addMarker添加标记,但没保存它返回的标记ID,而且Ace的标记是由编辑器session管理的,外部DOM操作根本碰不到它,必须用Ace自带的API来处理。下面是具体的解决步骤:
1. 保存标记ID
调用addMarker的时候,它会返回一个唯一的标记ID,把这个ID存起来,后面移除的时候要用:
var Range = require('ace/range').Range; // 保存标记ID到变量,方便后续移除 var myMarkerId = MyObjs.editor1.session.addMarker(new Range(11, 0, 11, 1), "myMarker", "fullLine");
2. 按需移除单个标记
在需要清除高亮的时候(比如调用setValue之前、重载编辑器之前),用保存的ID调用removeMarker:
// 移除指定的高亮标记 MyObjs.editor1.session.removeMarker(myMarkerId);
3. 一次性清除所有标记
如果你的场景是重新初始化编辑器,或者需要清除所有标记,直接调用clearMarkers可以一键清空当前session下的所有标记:
// 清除当前编辑器session的所有标记 MyObjs.editor1.session.clearMarkers();
为什么之前的方法没用?
Ace的标记是编辑器内部维护的DOM元素,它会把标记和session绑定在一起,jQuery这类外部DOM操作工具根本无法正确识别和删除这些标记,必须通过Ace官方提供的API来管理标记的生命周期。
比如你调用setValue的时候,只是修改了编辑器的内容,并不会自动清除session里的标记,所以必须手动调用移除方法。
内容的提问来源于stack exchange,提问作者puneet
相关产品推荐
相关产品推荐

