我在Internet Explorer的JSP / Javascript项目中使用CKEditor,需要从编辑器中获取光标的位置。 我找到了代码,如果它是一个文本区域,但它不是一个文本区域。为ckeditor输入文本的区域是一个具有class =" cke_editable cke_editable_themed cke_contents_ltr cke_show_borders"的主体。
function caret(node) {
if(node.selectStart)
return node.selection.start();
else if(!document.selection)
return 0;
var c = "\001";
var sel =document.selection.createRange();
var dul =sel.duplicate();
var len =0;
dul.moveToElementText(node);
sel.text = c;
len = (dul.text.indexof(c));
sel.moveStart('character',-1);
set.text = "";
return len;
}
如果我不将textarea作为ckeditor实例,则上述代码有效。当我将它作为CKEditor实例时,使用警报我已经能够跟踪代码并找到" dul.moveToElementText(节点)"是代码崩溃的行。我相信这是因为该代码仅适用于文本区域,因此我希望有人知道类似的代码将适用于body元素。
由于
答案 0 :(得分:0)
如果您尝试使用新元素替换文本,这是基本想法:
<强> HTML:强>
<div id="ed" contenteditable="true">Hello World</div>
<hr/>
<button id="swap">Swap?</button>
<强> JavaScript的:强>
var editor = CKEDITOR.instances.ed;
document.getElementById("swap").onclick = function(){
var txt = editor.getSelection().getSelectedText() || "";
var reversed = txt.split("").reverse().join("");
var linkHTML = "<a>" + reversed + "</a>";
var newElem = CKEDITOR.dom.element.createFromHtml( linkHTML, editor.document );
editor.insertElement( newElem );
};
示例:强>
更多信息:
现在如果你让编辑器变得模糊,你就会遇到一个问题,因为选择将会丢失。
在这种情况下,您需要调用锁定和解锁
editor.getSelection().lock(); //call when you start your dialog
editor.getSelection().unlock(); //call when your dialog is done
理想情况下,您不会以这种方式创建插件,您应该按照教程http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1创建插件,或者通过劫持对话框事件和覆盖功能来扩展它。