Учитывая, что 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. Попробуйте: поместите каретку куда угодно, но в основном до ^
, чтобы увидеть, покрыты ли сложные случаи.
Можем ли мы получить полный html до/после текущей позиции курсора, изменив эту функцию в некотором роде? –