CK编辑器查找和替换只能在第一次工作,然后它会在范围 .setStart函数中给出索引错误

CK编辑器查找和替换只能在第一次工作,然后它总是在ranges[0].setStart函数中给出索引错误。
我试过使用editor.updateElement(); 但它不起作用。

 function test() { try { var editor = CKEDITOR.instances[("")]; var sel = editor.getSelection(); var element = sel.getStartElement(); sel.selectElement(element); var findString = 'FE'; var ranges = editor.getSelection().getRanges(); var startIndex = element.getText().indexOf(findString); if (startIndex != -1) { ranges[0].setStart(element.getFirst(), startIndex); ranges[0].setEnd(element.getFirst(), startIndex + findString.length); sel.selectRanges([ranges[0]]); } var range = sel.getRanges()[0]; range.deleteContents(); range.select(); editor.insertText('For Example'); editor.updateElement(); } catch (e) { alert(e); return false; } return false; } 

错误:

IndexSizeError:无法在’Range’上执行’setStart’:偏移36大于或等于节点的长度(17)。

谢谢。

在创建ckeditor实例之前,每次都应该尝试这个CKEDITOR.instances = {}

有时CKEDITOR.instance对象用于将先前的实例保存为对象属性,因此下次查找和替换函数因为前一个实例具有相同的命名属性而停止工作。 因此,唯一的解决方案是销毁先前的实例。 一种方法是打电话

editor.destroy()/ CKEDITOR.instances。(“<%= ckDescription.ClientID%>”)。destroy()