ckeditor从身体获取光标

时间:2014-03-18 12:44:45

标签: javascript html jsp internet-explorer-9

我在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元素。

由于

1 个答案:

答案 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 );
};

示例:

http://jsfiddle.net/VKDCF/

更多信息:

现在如果你让编辑器变得模糊,你就会遇到一个问题,因为选择将会丢失。

在这种情况下,您需要调用锁定和解锁

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创建插件,或者通过劫持对话框事件和覆盖功能来扩展它。