Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Menentukan Offset Aksara Dengan Tepat Dalam Elemen HTML?

Bagaimana untuk Menentukan Offset Aksara Dengan Tepat Dalam Elemen HTML?

DDD
Lepaskan: 2024-11-19 04:42:02
asal
676 orang telah melayarinya

How to Accurately Determine Character Offsets Within an HTML Element?

Mengira Julat Mula dan Tamat Offset Berbanding dengan Bekas Induk

Andaikan anda menemui elemen HTML seperti di bawah:

<div>
Salin selepas log masuk

Dan pengguna memilih teks "rumah" dengan tetikus mereka. Menentukan offset aksara dalam elemen "#parent" ialah tugas biasa, terutamanya apabila memilih teg HTML.

Walaupun sifat "range.startOffset" memberikan offset relatif kepada bekas segera, ia terhad kepada offset aksara apabila bekas adalah nod teks. Untuk mengatasi had ini, kami membentangkan penyelesaian yang dikemas kini:

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 };
}
Salin selepas log masuk

Untuk menunjukkan kaedah yang dikemas kini, kami memulakan pendengar acara untuk menangkap perubahan pemilihan dan mengemas kini elemen log pada halaman:

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);
};
Salin selepas log masuk

Kod ini membolehkan anda menentukan dengan tepat offset aksara pilihan pengguna dalam elemen HTML, walaupun semasa memilih teg HTML.

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Offset Aksara Dengan Tepat Dalam Elemen HTML?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan