Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie kann verhindert werden, dass der Cursor an den Anfang eines ContentEditable-Objekts zurückgesetzt wird?

Barbara Streisand
Freigeben: 2024-11-10 16:07:02
Original
1025 Leute haben es durchsucht

How to Prevent the Cursor from Resetting to the Beginning of a ContentEditable ``?

Cursorposition auf ContentEditable

festlegen

Beim Arbeiten mit einem contentEditable='on'

kommt es häufig vor Ich stoße auf das Problem, dass der Cursor nach Wiederherstellung des Fokus wieder an den Textanfang zurückkehrt. Um dieses Problem anzugehen, wurde eine browserübergreifende Lösung entwickelt.

Lösung:

1. Cursorposition speichern:

function saveSelection() {
  if (window.getSelection) { // non-IE
    savedRange = window.getSelection().getRangeAt(0);
  } else if (document.selection) { // IE
    savedRange = document.selection.createRange();
  }
}
Nach dem Login kopieren

Diese Funktion wird an die Ereignisse onmouseup und onkeyup des

angehängt. und speichert die aktuelle Auswahl in der Variable „savedRange“.

2. Cursorposition wiederherstellen:

function restoreSelection() {
  if (savedRange != null) {
    if (window.getSelection) { // non-IE
      var s = window.getSelection();
      s.removeAllRanges();
      s.addRange(savedRange);
    } else if (document.createRange) { // non-IE
      window.getSelection().addRange(savedRange);
    } else if (document.selection) { // IE
      savedRange.select();
    }
  }
}
Nach dem Login kopieren

Diese Funktion wird an das Onfocus-Ereignis des

angehängt. und stellt die in „savedRange“ gespeicherte Auswahl wieder her.

3. Klickereignisse verhindern (optional):

Wenn Sie möchten, dass der Cursor beim Klicken wiederhergestellt wird, anstatt auf den Anfang zurückgesetzt zu werden, können Sie die folgenden Funktionen verwenden:

var isInFocus = false;

function onDivBlur() {
  isInFocus = false;
}

function cancelEvent(e) {
  if (isInFocus == false && savedRange != null) {
    e.stopPropagation();
    e.preventDefault();
    restoreSelection();
    return false;
  }
}
Nach dem Login kopieren

Diese Funktionen werden an die Ereignisse onblur, onclick und onmousedown angehängt und verhindern, dass das Click-Ereignis die Cursorposition zurücksetzt. Sie stellen außerdem die Auswahl wieder her und stellen sicher, dass der Cursor dort platziert wird, wo er aufgehört hat.

Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass der Cursor an den Anfang eines ContentEditable-Objekts zurückgesetzt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage