var: Ansatz zur Problemlösung

Beitrag lesen

Hallo miteinander!

Also, bevor der Thread Staub ansetzt, hier mal meine vorläufigen Erkenntnisse:

Es ist zwar mittels Range und Selection tatsächlich möglich, die Cursorposition nach Änderungen am innerHTML des div-Elements wiederherzustellen, aber für den von mir verfolgten Zweck ist das, so wie ich das sehe, nicht die beste Lösung.

Denn nehmen wir mal an, wir ersetzen während des Schreibens den Teil eines Textknotens durch einen Elementknoten wie etwa ein span- oder mark-Element, sobald der letzte Buchstabe des dadurch optisch hervorzuhebenden Wortes geschrieben wurde.

Würden wir nun nach dem Einfügen des span- oder mark-Elements die Cursorposition wiederherstellen, dann hätte das - soweit ich das beurteilen kann - den Effekt, dass wir eben genau an der Stelle weiterschreiben wo wir aufgehört haben, sprich innerhalb des eingefügten Elements, mit der Folge, dass der weitere Text ebenfalls eingefärbt wäre.

Es erscheint mir also wesentlich sinnvoller, beim Setzen des Cursors nicht pauschal die alte Position wiederherzustellen, sondern den Cursor statt dessen ausdrücklich nach dem neuen Elementknoten einzufügen, sobald die gesuchte Zeichenkette komplett ist.

Optisch betrachtet ist das zwar die selbe Cursorposition, aber eben auf einer ganz anderen Grundlage, - welche zudem weitaus weniger aufwändig ist! Um den Cursor nach dem span- oder mark-Element einzufügen braucht man nämlich nur die folgende einfache Funktion aufzurufen:

function setCursorPosition (element) {

  var range = document.createRange( );
  range.setStartAfter(element);
  range.collapse(true);

  var selection = window.getSelection( );
  selection.removeAllRanges( );
  selection.addRange(range);

}

Damit verlagert sich die Problematik auf die etwas leichter zu handhabende Frage, wie man das eingefügte Element identifiziert, damit es der Funktion als Parameter übergeben werden kann.

In bisherigen Tests hat das damit jedenfalls perfekt geklappt: Der Schreibfluss wird nicht unterbrochen, der Cursor ist immer genau da wo er sein soll, und es werden nur die Ausdrücke eingefärbt, die auch tatsächlich hervorgehoben werden sollen.

Als Arbeitsgrundlage sollte das also vorerst genügen. ;-)

Nochmals Dank und Gruß an alle!

var