我有以下方法使用来自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上发生在几台使用此示例应用程序的计算机上
有没有人知道在不使用range.insertNode()
的情况下将HTML粘贴到插入符号的另一种方式?使用IE11渲染引擎的Windows应用商店应用,如果它在IE11中工作,它将在商店应用/通用应用程序中工作
答案 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
代码时,一切正常。现在我只需要分叉我首选的富编辑器并替换方法