首頁 > web前端 > js教程 > 如何在 ContentEditable Div 的遊標處插入 HTML?

如何在 ContentEditable Div 的遊標處插入 HTML?

DDD
發布: 2024-11-11 03:42:02
原創
657 人瀏覽過

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

在 ContentEditable Div 的遊標處插入 HTML

使用允許編輯的 div 時,您可能需要直接在以下位置插入 HTML。雖然像 insertText() 這樣的方法可以添加純文本,但瀏覽器通常會將以此方式插入的 HTML 顯示為文本,而不是執行它。

要克服此限制,需要更複雜的方法。一種解決方案涉及利用 Range 物件的 insertNode() 方法。然而,IE8及以下版本依賴pasteHTML()。

實作

以下函數處理跨主要瀏覽器的HTML插入:

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);
}
登入後複製

改進

根據使用者要求,開發了附加參數的更新版本:

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);
}
登入後複製

當設定為true 時,此參數可讓您選擇插入的內容執行後。

以上是如何在 ContentEditable Div 的遊標處插入 HTML?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板