挑戰:
在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中文網其他相關文章!