Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Memasukkan HTML pada Kursor dalam Div Boleh Diedit Kandungan?

Bagaimana untuk Memasukkan HTML pada Kursor dalam Div Boleh Diedit Kandungan?

DDD
DDDasal
2024-11-11 03:42:02600semak imbas

How to Insert HTML at the Cursor in a ContentEditable Div?

Memasukkan HTML pada Kursor dalam Div Boleh Diedit Kandungan

Apabila bekerja dengan div yang membenarkan pengeditan, anda mungkin mahu memasukkan HTML terus di kursor. Walaupun kaedah seperti insertText() boleh menambah teks biasa, penyemak imbas biasanya memaparkan HTML yang disisipkan dengan cara ini sebagai teks dan bukannya melaksanakannya.

Untuk mengatasi had ini, pendekatan yang lebih terperinci diperlukan. Satu penyelesaian melibatkan memanfaatkan kaedah insertNode() bagi objek Julat. Walau bagaimanapun, IE8 dan ke bawah bergantung pada pasteHTML().

Pelaksanaan

Fungsi berikut mengendalikan sisipan HTML merentas pelayar utama:

function pasteHtmlAtCaret(html) {
  // Obtain the selection range
  var sel, range;
  if (window.getSelection) {
    // For non-IE browsers
    sel = window.getSelection();
    range = sel.getRangeAt(0);
  } else if (document.selection) {
    // For IE8 and below
    range = document.selection.createRange();
  }

  // Delete existing content in the range
  range.deleteContents();

  // Create an element to hold the HTML
  var el = document.createElement("div");
  el.innerHTML = html;
  
  // Create a fragment to insert
  var frag = document.createDocumentFragment();

  // Loop through elements in the div
  while ((node = el.firstChild)) {
    frag.appendChild(node);
  }
  
  // Insert the fragment into the range
  range.insertNode(frag);

  // Position the caret after the inserted content
  range = range.cloneRange();
  range.setStartAfter(frag.lastChild);
  range.collapse(true);
  if (sel) sel.removeAllRanges();
  if (sel) sel.addRange(range);
}

Peningkatan

Berdasarkan permintaan pengguna, versi yang dikemas kini dengan parameter tambahan telah dibangunkan:

function pasteHtmlAtCaret(html, selectPastedContent) {
  // ... (same as before)

  // Modify based on parameter
  if (selectPastedContent) {
    range.setStartBefore(frag.firstChild);
  } else {
    range.collapse(true);
  }

  // Update the selection
  sel.removeAllRanges();
  sel.addRange(range);
}

Apabila ditetapkan kepada benar, parameter ini membolehkan anda memilih kandungan yang dimasukkan semasa pelaksanaan.

Atas ialah kandungan terperinci Bagaimana untuk Memasukkan HTML pada 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