Выделение в документе всегда присутствует, даже если никакой текст не выделен, тогда границы выделения совпадают и оно может отображаться, как курсор, или вообще не отображаться, если находится в нередактируемой области.
var selection = getSelection();
Курсору (каретке) соответствует объект range, у которого совпадают границы (схлопнутый range).
var range = selection.getRangeAt(0);
range.getBoundingClientRect возвратит координаты курсора (top, left), что тут непонятного?