Update: Habe jetzt herausgefunden, wie ich die Position relativ zum Anfang des Editors bestimmen kann:
var sel = window.getSelection();
var range = document.createRange();
range.setStart(editor_root, 0);
range.setEnd(sel.anchorNode,sel.anchorOffset);
var caret_pos = range.toString().length;
Ist zwar finde ich etwas hackish, klappt aber soweit. Nur leider stehe ich beim Setzen des Cursors wieder vor dem selben Problem. Nach dem Highlighting springt der Cursor zurück auf Position null, wenn ich ihn dann wieder an die korrekte Position verschieben will, wirft die Funktion
sel.extend(editor_root, caret_pos);
Fehler mit "Index or size is negative or greater than the allowed amount", weil extend (genauso wie setEnd und setStart) den offset immer vom innersten Node aus bestimmt. Welcher Node der innerste ist, weiß ich zu dem Zeitpunkt aber noch nicht. Argh.