CK 编辑器查找和替换仅在第一次时有效,然后它总是在 ranges[0].setStart
函数中给出索引错误。
我尝试过 editor.updateElement();
但它不起作用。
function test() {
try {
var editor = CKEDITOR.instances[("<%=ckDescription.ClientID %>")];
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: Failed to execute 'setStart' on 'Range': The offset 36 is larger than or equal to the node's length (17).
谢谢。
最佳答案
每次在创建 ckeditor 实例之前你都应该尝试这个 CKEDITOR.instances={}
有时 CKEDITOR.instance 对象用于将先前的实例保存为对象属性,因此下次查找和替换功能将停止工作,因为先前的实例具有相同的命名属性。所以唯一的解决办法就是销毁之前的实例。一种方法是调用
editor.destroy()/CKEDITOR.instances.("<%=ckDescription.ClientID %>").destroy()
关于javascript - CK 编辑器查找和替换仅在第一次时有效,然后它将在 range[0].setStart 函数中给出索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29910435/