在插入符号处粘贴 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 上使用此示例应用程序
的几台机器上都会发生
有没有人知道另一种不使用 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 我喜欢的富编辑器并替换方法
我有以下方法在插入符号位置粘贴一些 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 上使用此示例应用程序
有没有人知道另一种不使用 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 我喜欢的富编辑器并替换方法