Получаете Selection, потом
Range, у него есть свойства
Range.startContainer и .endContainer которые указывают на начальный и конечный узел
а также Range.startOffset и .endOffset в которых, внезапно, offset внутри узла.
Ну и там еще пачка всяких полезных методов (collapse, например).
И все довольно печально в плане кроссбраузерности. Удачи вам, держитесь.