CKEditor walker get prev character
by sauravmishra
HTML
<script src="http://cdnjs.cloudflare.com/ajax/libs/ckeditor/4.2/ckeditor.js"></script>
<textarea id="editor">
<blockquote><a href="foo">^Foo</a></blockquote>
<p>^Hello <strong>world</strong>!</p>
</textarea>
<button type="button" onclick="console.log( getPrevChar() )">Get previous char</button>
JavaScript
var editor = CKEDITOR.replace( 'editor', {
plugins: 'wysiwygarea,sourcearea,basicstyles,toolbar',
allowedContent: true
} );
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;
}