2014-01-07 78 views

回答

9

鑑於editorCKEDITOR.instances之一,下面應該做的伎倆:

function getPrevChar() { 
    var range = editor.getSelection().getRanges()[ 0 ], 
     startNode = range.startContainer; 

    if (startNode.type == CKEDITOR.NODE_TEXT && range.startOffset) 
     // Range at the non-zero position of a text node. 
     return startNode.getText()[ range.startOffset - 1 ]; 
    else { 
     // Expand the range to the beginning of editable. 
     range.collapse(true); 
     range.setStartAt(editor.editable(), CKEDITOR.POSITION_AFTER_START); 

     // Let's use the walker to find the closes (previous) text node. 
     var walker = new CKEDITOR.dom.walker(range), 
      node; 

     while ((node = walker.previous())) { 
      // If found, return the last character of the text node. 
      if (node.type == CKEDITOR.NODE_TEXT) 
       return node.getText().slice(-1);   
     } 
    } 

    // Selection starts at the 0 index of the text node and/or there's no previous text node in contents. 
    return null; 
} 

檢查jsFiddle。試一試:把脫字符號放在任何地方,但大多在^之前,看看是否涵蓋了棘手的情況。

+0

我們可以通過某種方式修改此函數來獲取當前光標位置之前/之後的完整html嗎? –