sonic: Position des texcursors in einem Element ermitteln/setzen

Beitrag lesen

var rangeObject = getRangeObject(userSelection);

function getRangeObject(selectionObject) {
if (selectionObject.getRangeAt)
return selectionObject.getRangeAt(0);
else { // Safari!
var range = document.createRange();
range.setStart(selectionObject.anchorNode,selectionObject.anchorOffset);
range.setEnd(selectionObject.focusNode,selectionObject.focusOffset);
return range;
}
}


>   
> Hoffe das hilft dir.  
  
Nicht wirklich, glaube ich. Das Problem ist, dass selectionObject.anchorOffset sich immer auf den innersten Node bezieht, d.h. wenn ich folgenden Code habe:  
  
~~~html
  
<pre class="editor">echo $test;</pre>  

und mein Cursor direkt hinter dem Dollarzeichen steht, bekomme ich anchorOffset 6, was die Information ist, die ich haben will, wenn allerdings das Syntax Highlighting aktiv ist, sieht der obere Code in etwa wie folgt aus:

  
<pre class="editor"><span class='keyword'>echo</span> <span class='variable'>$test</span>;</pre>  
  
anchorOffset gibt mir dann 1 aus, wenn mein Cursor hinter dem Dollarzeichen steht, da als anchorNode das span angesehen wird und nicht wie zuvor das umschließende pre, d.h. um die Position vom Anfang des Editor aus zu bestimmen müsste ich mich durch die ganzen previousSiblings durchhangeln und deren Länge zusammenzählen, aber ich fürchte, dass das von der Performance her nicht realistisch ist (v.a. da schnell hunderte von spans zusammenkommen können)