在插入符号处粘贴 HTML 而不使用 insertNode

Paste HTML at caret without using insertNode

我有以下方法在插入符号位置粘贴一些 HTML,使用 `range.insertNode(),来自 this SO answer

function insertAtCursor(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, lastNode;
            while ((node = el.firstChild)) {
                lastNode = frag.appendChild(node);
            }
            range.insertNode(frag);

            // Preserve the selection
            if (lastNode) {
                range = range.cloneRange();
                range.setStartAfter(lastNode);
                range.collapse(true);
                sel.removeAllRanges();
                sel.addRange(range);
            }
        }
    } // non IE code removed
}

这适用于 Windows 商店应用。我在 Universal Apps for Windows 8.1 中发现了 a bug,其中在使用 range.insertNode() 粘贴事件后出现严重的打字滞后。该问题仅出现在 Windows 8.1 Universal Apps 运行 under Windows 10 中。我无法在 Windows 8.1 下复制该问题(尽管我过去确实经历过在 Win8.1 上)- 但每次在 Windows 10 上使用此示例应用程序

的几台机器上都会发生

https://onedrive.live.com/redir?resid=EE99EF9560A6740E!230777&authkey=!ACBcfSH4H1BE1s8&ithint=file%2czip

有没有人知道另一种不使用 range.insertNode() 将 HTML 粘贴到插入符号的方法? Windows 使用 IE11 渲染引擎存储应用程序,因此如果它在 IE11 中工作,它将在商店应用程序/通用应用程序中工作

呵呵。我现在觉得有点傻。答案是 second 我发布的 link 的答案

var doc = document.getElementById("your_iframe").contentWindow.document;

// IE <= 10
if (document.selection){
    var range = doc.selection.createRange();
        range.pasteHTML("<b>Some bold text</b>");

// IE 11 && Firefox, Opera .....
}else if(document.getSelection){
    var range = doc.getSelection().getRangeAt(0);
    var nnode = doc.createElement("b");
    range.surroundContents(nnode);
    nnode.innerHTML = "Some bold text";
};

当我用这个 surroundContents 方法替换我的 insertNode 代码时,一切正常。现在我只需要 fork 我喜欢的富编辑器并替换方法