Bewegen Sie die Cursorposition mit Javascript?

Ich bin auf der Suche bewegen Sie den Cursor genau vier Leerzeichen vor seiner aktuellen position, so dass ich legen Sie eine Registerkarte richtig. Ich hab schon die HTML einfügen an der Cursor-position arbeiten, aber wenn ich legen Sie die HTML -, die Einfügemarke wird hinter sich gelassen. Ich habe in den letzten Stunden oder so suchen verschiedene Möglichkeiten, dies zu tun und ich habe versucht, viele von Ihnen, aber ich kann Sie nicht alle von Ihnen arbeiten für mich. Hier ist die jüngste Methode, die ich versucht habe:

function moveCaret(input, distance) {
    if(input.setSelectionRange) {
        input.focus();
        input.setSelectionRange(distance, distance);
    } else if(input.createTextRange) {
        var range = input.createTextRange();
        range.collapse(true);
        range.moveEnd(distance);
        range.moveStart(distance);
        range.select();
    }
}

Es bringt absolut nichts-auch nicht, bewegen Sie den Cursor, werfen Sie irgendwelche Fehler oder etwas. Das hinterlässt mich ratlos. Und ja, ich weiß, dass die oben genannten Methode stellen (soll) stellen Sie den Cursor an eine bestimmte Stelle vom Anfang des angegebenen Knotens ( input ), aber auch das funktioniert nicht. Also, was genau mache ich falsch und wie kann ich es richtig machen?


Edit: Basiert Sie auf die links, o.v. vorausgesetzt, ich habe es geschafft, etwas zusammen Schustern, dass endlich etwas zu tun: werfen ist ein Fehler. Yay! Hier der neue code:

this.moveCaret = function(distance) {
    if(that.win.getSelection) {
        var range = that.win.getSelection().getRangeAt(0);
        range.setStart(range.startOffset + distance);
    } else if (that.win.document.selection) {
        var range = that.win.document.selection.createRange();
        range.setStart(range.startOffset + distance);
    }
}

Nun, das gibt den Fehler Uncaught Error: NOT_FOUND_ERR: DOM Exception 8. Irgendwelche Ideen, warum?

  • Haben Sie versucht, die Einstellung der element.selectionStart und element.selectionEnd? Es sollte funktionieren, cross-browser für die Eingabe und Texteingabefelder soweit ich mich erinnere.
  • Ich vermied es, weil ich glaube, dass es nicht die Arbeit, die in früheren Versionen des IE8. Ich werde schauen es trotzdem, obwohl.
  • Der einzige IE-version Teste ich mit dem IE9, viel Glück obwohl. 🙂
  • Ja, es scheint selectionStart funktioniert nicht in früheren Versionen des IE, aber danke trotzdem. =)
  • Mögliche Duplikate von: stackoverflow.com/questions/1181700/... Dieser und dieser Antwort angezeigt zu haben, erhielt viel Anerkennung.
  • äääh, was ist that beziehen Ihr Bearbeiten? Ich sehe es nicht zugewiesen wird
  • Oh, tut mir Leid. that ist eine Referenz auf ein Objekt, das eine window - Objekt enthält. win ist entweder ein geöffnetes Fenster oder die standard-Fenster.
  • Die DOM-Fehler ist wahrscheinlich, wenn der neue offset-existiert nicht ("nach dem Ende des Elements). Beachten Sie auch, dass start-offset bezieht sich auf die Anzahl von Zeichen, die den Beginn des Knotens, falls die Auswahl eine text-Knoten, aber die Anzahl der Knoten vom Anfang, wenn der Knoten ein element (verwirrend ich weiß). Ich könnte versuchen, und schreiben eine Antwort auf diese, aber es ist eine ziemlich schwierige Aufgabe zu erreichen, vor allem, wenn Sie wollen, um Fälle mit formatierten text (z.B. <b> - tags, etc), als auch nur plain text.
  • der Blick durch die anderen Antworten, die ich gelinkt hast, ich bin stark unter dem Eindruck, dass ein expliziter Verweis auf eine contenteditable-element gepflegt werden. Sind Sie in der Lage, fügen Sie einen Barebone-jsfiddle mit deiner Methode? Dies ist ziemlich faszinierend
  • Ja, ich erkannte, dass der offset wird über das Ende des Elements könnte den Fehler verursachen. Ich habe versucht, mit verschiedenen offsets, kam aber zu dem Schluss, dass das nicht die Quelle des Fehlers. Und Nein, ich bin nicht der Planung über das schreiben einen WYSIWYG-editor, dieser ist für irgendetwas anderes. Gibt es nicht andere Elemente im text (Stil oder etwas anderes). Ich kann Ihnen ein Beispiel der HTML, wenn Sie es brauchen, um zu schreiben eine Antwort.
  • Es ist spät, also werde ich sehen, wenn ich kann hinzufügen, ein morgen. Vielen Dank für Ihr Interesse.

Schreibe einen Kommentar