首頁  >  文章  >  web前端  >  如何將 HTML 插入到 Contenteditable DIV 的插入符位置?

如何將 HTML 插入到 Contenteditable DIV 的插入符位置?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-10 00:19:02292瀏覽

How to Insert HTML into a Contenteditable DIV at the Caret Position?

將HTML 插入到Contenteditable DIV 的插入符位置

挑戰:

在contenteditable div可用於防止按下Enter 鍵時輸入文字。當遊標位於所需的插入點時,我們尋找一種方法來插入 HTML(例如
標籤)而不將其顯示為純文字。

解決方案:

雖然在 IE 中使用 Range.pasteHTML() 有效,但其他瀏覽器將 HTML 標籤顯示為文字。以下功能可讓我們在所有主要瀏覽器中插入HTML,如果選擇則取代現有文字:

function pasteHtmlAtCaret(html) {
  var sel, range;
  if (window.getSelection) {
    // IE9 and non-IE
    sel = window.getSelection();
    if (sel.getRangeAt && sel.rangeCount) {
      range = sel.getRangeAt(0);
      range.deleteContents();

      // Create a document fragment from the HTML string
      var el = document.createElement("div");
      el.innerHTML = html;
      var frag = document.createDocumentFragment();
      while ((node = el.firstChild)) {
        frag.appendChild(node);
      }

      range.insertNode(frag);

      // Preserve the selection after the inserted content
      if (frag.lastChild) {
        range = range.cloneRange();
        range.setStartAfter(frag.lastChild);
        range.collapse(true);
        sel.removeAllRanges();
        sel.addRange(range);
      }
    }
  } else if (document.selection && document.selection.type != "Control") {
    // IE < 9
    document.selection.createRange().pasteHTML(html);
  }
}

增強功能(2013 年8 月):

回應使用者請求時,新增了一個附加參數來指定是否應插入內容

function pasteHtmlAtCaret(html, selectPastedContent) {
  // Similar functionality as the original function
  // ...
}

此更新的功能允許我們在插入HTML 內容後控制選擇行為。

以上是如何將 HTML 插入到 Contenteditable DIV 的插入符位置?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn