我正在编写一个CKEDITOR插件,需要在标签中包含某些文本。从webservice,我有一系列需要包装的项目。该数组只是纯文本字符串。如:
"[best buy", "horrible migraine", "eat cake"]
我需要在编辑器中找到此文本的实例,并将它们包含在span标记中。
这更复杂,因为文本可能会被标记。因此,“最佳购买”的HTML可能是
"<strong>best</strong> buy"
但是从Web服务返回的文本被删除了任何标记。
我开始尝试使用CKEDITOR.htmlParser()对象,这似乎是适度成功的。我能够捕获parser.onText事件并检查文本是否包含我的数组中的任何内容。
但后来我无法修改该文字。修改不会持久保存到源html。所以我认为使用htmlParser()是一个死胡同。
完成此任务的最佳方法是什么?
哦,作为奖励,我也不想在显示更改时丢失用户当前的光标位置。
答案 0 :(得分:0)
这是我最近做的事情,它似乎到目前为止工作。
我创建了一个文本过滤规则,在项目数组中搜索文本中包含(或部分包含)的任何项目。如果是这样,它会将元素包裹在我的范围内。
这里的一个缺点是,我最后用两个带有标记的项目。但在我的用例中,这是可以容忍的。
然后我使用以下方式设置结果:
editor.document.getBody().setHtml(results);
因此,当读取此文本时,我还必须取消此标记。我是使用editor.dataProcessor.htmlFilter。
上的元素过滤器完成的这似乎对我(迄今为止有限的)测试用例很有效。