Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menetapkan dan Mengekalkan Kedudukan Kursor dalam Div Boleh Diedit Kandungan?

Bagaimana untuk Menetapkan dan Mengekalkan Kedudukan Kursor dalam Div Boleh Diedit Kandungan?

Linda Hamilton
Linda Hamiltonasal
2024-11-15 03:21:02717semak imbas

How to Set and Maintain Cursor Position in a ContentEditable Div?

Tetapkan Kedudukan Kursor pada contentEditable <div>

Apabila berurusan dengan contentEditable <div>, fungsi penyemak imbas lalai menetapkan semula kedudukan kursor ke permulaan teks apabila kembali fokus. Untuk menyelesaikan masalah ini, pertimbangkan penyelesaian berikut:

Simpan dan Pulihkan Kedudukan Kursor:

  1. Simpan Kedudukan Semasa: Dalam onmouseup dan acara onkeyup, simpan kedudukan kursor semasa dalam pembolehubah, savedRange.
  2. Kedudukan Pulihkan: Dalam acara onfocus, pulihkan pilihan yang disimpan daripada savedRange.

Pendekatan ini memastikan kursor diletakkan pada lokasi terakhir yang diketahui apabila div kembali fokus.

Pengendalian Klik:

Untuk memulihkan pilihan apabila mengklik div, langkah tambahan berikut diperlukan:

  1. Batalkan Acara Klik: Lampirkan cancelEvent() kepada acara onclick dan onmousedown. Fungsi ini menghalang gelagat lalai acara ini dan memanggil restoreSelection().
  2. Keadaan Fokus Jejak: Gunakan pembolehubah isInFocus untuk menentukan sama ada div berada dalam fokus. Hanya batalkan acara klik apabila div tidak berada dalam fokus.

Kod Kerja:

<div>
var savedRange, isInFocus;

function saveSelection() {
  savedRange = window.getSelection ? window.getSelection().getRangeAt(0) : document.selection.createRange();
}

function restoreSelection() {
  isInFocus = true;
  document.getElementById("area").focus();

  if (savedRange) {
    if (window.getSelection) {
      var s = window.getSelection();
      s.removeAllRanges();
      s.addRange(savedRange);
    } else if (document.createRange) {
      window.getSelection().addRange(savedRange);
    } else if (document.selection) {
      savedRange.select();
    }
  }
}

function onDivBlur() {
  isInFocus = false;
}

function cancelEvent(e) {
  if (isInFocus === false && savedRange) {
    if (e && e.preventDefault) {
      e.stopPropagation();
      e.preventDefault();
    } else {
      window.event.cancelBubble = true;
    }
    restoreSelection();
    return false;
  }
}

Atas ialah kandungan terperinci Bagaimana untuk Menetapkan dan Mengekalkan Kedudukan Kursor dalam Div Boleh Diedit Kandungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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