2014-01-07 3 views

ответ

9

Учитывая, что editor является одним из CKEDITOR.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 до/после текущей позиции курсора, изменив эту функцию в некотором роде? –

Смежные вопросы