首页  >  文章  >  web前端  >  如何在所有浏览器中在 ContentEditable Div 的光标位置插入 HTML?

如何在所有浏览器中在 ContentEditable Div 的光标位置插入 HTML?

Linda Hamilton
Linda Hamilton原创
2024-11-17 11:52:01371浏览

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

在 ContentEditable Div 中的光标位置插入 HTML

问题陈述

插入 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn