问题陈述
插入 HTML,例如
解决方案
要将 HTML 直接插入到 IE 以外的浏览器中,请利用 Range 对象的 insertNode() 方法:
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(); var el = document.createElement("div"); el.innerHTML = html; var frag = document.createDocumentFragment(), node; while (node = el.firstChild) { frag.appendChild(node); } range.insertNode(frag); 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); } }
更新的解决方案,带有选择粘贴内容的选项
(可选)您可以使用额外参数选择插入的内容:
function pasteHtmlAtCaret(html, selectPastedContent) { // ... Original code ... var firstNode = frag.firstChild; range.insertNode(frag); if (lastNode) { range = range.cloneRange(); range.setStartAfter(lastNode); if (selectPastedContent) { range.setStartBefore(firstNode); } else { range.collapse(true); } sel.removeAllRanges(); sel.addRange(range); } // ... Original code ... }
此代码提供了在光标位置插入 HTML 的跨浏览器兼容性,并且可以根据需要灵活地选择插入的内容。
以上是如何在所有浏览器中在 ContentEditable Div 的光标位置插入 HTML?的详细内容。更多信息请关注PHP中文网其他相关文章!