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

时间:2015-11-14 14:14:23

标签: javascript dom copy-paste

我有以下方法使用来自this SO answer

的`range.insertNode()将一些HTML粘贴到插入位置
cat()

这适用于Windows应用商店应用。我在Universal Apps for Windows 8.1中发现了a bug,其中使用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 10下运行的Windows 8.1 Universal Apps中。我无法在Windows 8.1下复制该问题(尽管我过去在Win8.1上确实经历过这个问题) - 但每次都在Windows 10上发生在几台使用此示例应用程序的计算机上

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

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

1 个答案:

答案 0 :(得分:0)

卫生署。我觉得现在有点蠢。答案是我发布的链接中的第二个答案

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";
};

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