Lork für Tork: Textfeld zur Cursorposition scrollen

Beitrag lesen

ich bastele gerade an einem Javascript das Text an der Cursorposition einfügt.

Wie schaffe ich es das das Textfeld im Mozilla sich automatisch an die entsprechende Position scrollt?

Ich mache das ungefähr so:

textarea.ersetzen = function(neu, anfang, ende, markieren) {
    // neu: Einzufügender Text
    // anfang, ende: Start und Ende der Ersetzung, anfang = ende: Einfügen
    // markieren: eingefügten Textblock auswählen

// aktuelle Anzeigeposition sichern
    var scrollTop = this.scrollTop;

// neuen Text einfügen
    this.value = this.value.substr(0, anfang) + neu + this.value.substr(ende, this.value.length);

// Cursor setzen
    this.selectionEnd = anfang + neu.length;
    if (markieren) {
        this.selectionStart = anfang;
    }
    else {
        this.selectionStart = anfang + neu.length;
    }

// Ansicht verschieben, wenn nötig
    if (this.clientHeight >= this.scrollHeight) { // Text ist kürzer als Eingabefeld, Cursor muss also sichtbar sein
        // dementsprechend nüscht tun
    }
    else if (this.selectionStart < this.value.length - 1) { // Cursor steht irgendwo im Text (lies: nicht ganz am Ende)
        var i;
        if (i = neu.match(/(\r\n|\n|\r)/g)) { // hinzugekommene Zeilen zählen
            this.scrollTop = scrollTop + Math.floor(this.clientHeight / this.rows) * i.length;
            /*
              clientHeight / rows entspricht ungefähr der
              Pixelhöhe einer Zeile (es mag eine exaktere Quelle geben, aber bei
              mir funktioniert es auch bei langen Texten sehr gut). Dies
              multipliziert mit der Anzahl neuer Zeilen ergibt die Pixelzahl x,
              um die die Ansicht weiter runtergeschoben werden muss (scrollTop + x),
              um den am Ende des neuen Blocks stehenden Cursor wieder sichtbar
              zu machen.
            */
        }
    }
    else { // Cursor steht am Ende des Textes
        this.scrollTop = this.scrollHeight - this.clientHeight;
    }
}

<textarea>.clientHeight beschreibt die Pixelhöhe des Elements in der Seite, .scrollHeight die des enthaltenen Textes, .scrollTop schließlich die Pixelposition, an der der Text derzeit angezeigt wird.