Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie kann man Zeichenversätze innerhalb eines HTML-Elements genau bestimmen?

DDD
Freigeben: 2024-11-19 04:42:02
Original
663 Leute haben es durchsucht

How to Accurately Determine Character Offsets Within an HTML Element?

Berechnen des Bereichsanfangs- und -endversatzes relativ zum übergeordneten Container

Angenommen, Sie stoßen auf HTML-Elemente wie das folgende:

<div>
Nach dem Login kopieren

Und ein Benutzer wählt mit der Maus den Text „Zuhause“ aus. Das Bestimmen der Zeichenoffsets innerhalb des „#parent“-Elements ist eine häufige Aufgabe, insbesondere bei der Auswahl von HTML-Tags.

Während die Eigenschaft „range.startOffset“ einen Offset relativ zum unmittelbaren Container bereitstellt, ist sie auf Zeichenoffsets beschränkt wenn der Container ein Textknoten ist. Um diese Einschränkung zu überwinden, präsentieren wir eine aktualisierte Lösung:

function getSelectionCharacterOffsetWithin(element) {
  var start = 0;
  var end = 0;
  var doc = element.ownerDocument || element.document;
  var win = doc.defaultView || doc.parentWindow;
  var sel;
  if (typeof win.getSelection != "undefined") {
    sel = win.getSelection();
    if (sel.rangeCount > 0) {
      var range = win.getSelection().getRangeAt(0);
      var preCaretRange = range.cloneRange();
      preCaretRange.selectNodeContents(element);
      preCaretRange.setEnd(range.startContainer, range.startOffset);
      start = preCaretRange.toString().length;
      preCaretRange.setEnd(range.endContainer, range.endOffset);
      end = preCaretRange.toString().length;
    }
  } else if ((sel = doc.selection) &amp;&amp; sel.type != "Control") {
    var textRange = sel.createRange();
    var preCaretTextRange = doc.body.createTextRange();
    preCaretTextRange.moveToElementText(element);
    preCaretTextRange.setEndPoint("EndToStart", textRange);
    start = preCaretTextRange.text.length;
    preCaretTextRange.setEndPoint("EndToEnd", textRange);
    end = preCaretTextRange.text.length;
  }
  return { start: start, end: end };
}
Nach dem Login kopieren

Um die aktualisierte Methode zu demonstrieren, initialisieren wir Ereignis-Listener, um Auswahländerungen zu erfassen und ein Protokollelement auf der Seite zu aktualisieren:

function reportSelection() {
  var selOffsets = getSelectionCharacterOffsetWithin(
    document.getElementById("editor")
  );
  document.getElementById("selectionLog").innerHTML =
    "Selection offsets: " + selOffsets.start + ", " + selOffsets.end;
}

window.onload = function () {
  document.addEventListener("selectionchange", reportSelection, false);
  document.addEventListener("mouseup", reportSelection, false);
  document.addEventListener("mousedown", reportSelection, false);
  document.addEventListener("keyup", reportSelection, false);
};
Nach dem Login kopieren

Mit diesem Code können Sie die Zeichenversätze der Auswahl eines Benutzers innerhalb eines HTML-Elements genau bestimmen, selbst wenn Sie HTML-Tags auswählen.

Das obige ist der detaillierte Inhalt vonWie kann man Zeichenversätze innerhalb eines HTML-Elements genau bestimmen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage