Javascript 在编辑器中选择光标前的单词

Javascript 在编辑器中选择光标前的单词,javascript,ckeditor,contenteditable,Javascript,Ckeditor,Contenteditable,我正在开发自动填充插件,我的要求是在按下空格键的同时选择光标前的单词,这样我就可以得到选中的文本并填充或插入新文本 例如,在ck之后按空格时,我将ck替换为CKEditor 我所做的是,当按下空格键时,我将光标前的单词作为键,如果键是ck,我将通过选择ck with range并插入新单词CKEditor,将其替换为CKEditor if (e.data.keyCode == 32) { var s = editor.getSelection(); var cursor

我正在开发自动填充插件,我的要求是在按下空格键的同时选择光标前的单词,这样我就可以得到选中的文本并填充或插入新文本

例如,在ck之后按空格时,我将ck替换为CKEditor

我所做的是,当按下空格键时,我将光标前的单词作为键,如果键是ck,我将通过选择ck with range并插入新单词CKEditor,将其替换为CKEditor

if (e.data.keyCode == 32) { 

    var s = editor.getSelection();  
    var cursor = s._.cache.nativeSel.anchorOffset;
    var data = s._.cache.nativeSel.focusNode.data;
    var node = s._.cache.nativeSel.focusNode;
    var selection = editor.getSelection();
    data = data.substring(0,cursor)
    var startIndex = data.lastIndexOf(" ");
    if (startIndex==-1) {
        startIndex=0;
    } else {
        startIndex=startIndex+1;
    }
    var key = data.substring(startIndex,data.length);
    // HERE KEY IS THE WORD BEFORE CURSOR, THERE IS NO ISSUE IN IT. 
    key = key.trim();
    if (key.trim() == 'ck') {
        var ranges = [];
        var range, text, index;
        console.log(editor.getSelection().getStartElement());
        var text = getTextNodes( editor.getSelection().getStartElement() ,key );
        range = editor.createRange();
        range.setStart( text, cursor - (key.length));
        range.setEnd( text, cursor);  
        ranges.push( range );
        selection.selectRanges( ranges );
        editor.insertHtml('CKEditor'); 
    }


// GETTING NODE OF THE KEY

function getTextNodes( element,key ) {
    var children = element.getChildren();
    var child;
    for ( var i = children.count(); i--; ) {
        child = children.getItem( i );
        if ( child.type == CKEDITOR.NODE_ELEMENT )
            getTextNodes( child );
        else if ( child.type == CKEDITOR.NODE_TEXT ) {
           if (child.$.data.indexOf(key)!=-1) {
               var text = child;
               return child;
        }
   }
}

它可以正常工作99%,但如果ck是新行的第一个字,它就失败了

我举例说明我所做的事情。请给出更好的建议。好的,现在更好了,但下次请更仔细地格式化您的代码和问题。