javascript - 在不使用 insertNode 的情况下在插入符处粘贴 HTML

标签 javascript dom copy-paste

我有以下方法在插入符号位置粘贴一些 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 应用商店应用。我发现了 a bug在 Windows 8.1 的通用应用程序中,在使用 range.insertNode() 粘贴事件后出现严重的打字滞后。该问题仅发生在 Windows 10 下运行的 Windows 8.1 通用应用程序中。我无法在 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 中工作,它将在商店应用/通用应用中工作

最佳答案

呵呵。我现在觉得有点傻。答案是我发布的链接中的第二个答案

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 我喜欢的富编辑器并替换方法

关于javascript - 在不使用 insertNode 的情况下在插入符处粘贴 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33709313/

相关文章:

Javascript代理: Modify array target and update array (length,内容)

javascript - 使用 JavaScript SDK 时如何查明 twilio 调用何时实际得到应答?

javascript - 当乒乓 Racket 移动时, Canvas 球会朝错误的方向弹跳

Javascript 文档成员变量

javascript - 我可以确定页面加载时复选框的默认状态(或者通过 Reset() 将其重置为什么值吗?)

windows - 如何在不传递文件的情况下排除 XCOPY 中的文件类型?

javascript - 你如何像在 Ember.js 中一样在 javascript 中复制类似 function(){ ... }.property() 的东西?

javascript - 使用 lodash 从字符串数组中查找子字符串

iphone - 在自定义 View /uiview子类上实现iphone的复制/粘贴控件

vim - 如何将文本粘贴到 Vim 可视模式中?