1

私は自動入力プラグインに取り組んでいます。私の要件は、スペースバーを押しながらカーソルの前の単語を選択して、選択したテキストを取得し、新しいテキストを入力または挿入できるようにすることです。

たとえば、「ck」の後にスペースを押すと、「ck」を「CKEditor」に置き換えます。

私がしたことは、スペースを押しながらカーソルの前の単語をキーとして取得し、キーが「ck」の場合、範囲で「ck」を選択し、新しい単語「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」の場合は失敗します。

4

0 に答える 0