Hello Stackers,
在我将window.getselection对象设置为另一个对象后,我似乎遇到了一个问题。这是一个例子:
document.getElementById('sendContent').focus(); //sendcontent is a contenteditable Div
current_position = window.getSelection(); //gets the selection inside sendContent
console.log(current_position); //at the console.log, the window.getSelection is the right one
pasteHtmlAtCaret(true); //here a sweetalert shows
在此之后,会弹出一个SweetAlert,用户必须输入一个URL,然后将其发布到current_position。 但似乎current_position在运行时发生了变化,这里发生了什么:
在第一个console.log:
但在sweetalert显示之后,current_position更改为:
我在第一次设置后尝试冻结/深度冻结current_position但是它不起作用,它仍然在运行时发生变化。
它可能与current_position有一个对window.getselection属性的引用有关,所以每次窗口选择改变时它都会改变。但我的问题是。我可以解决这个问题吗?
我需要在SweetAlert弹出之前进行选择。
编辑1:
这就是我想要做的选择:
var sel, range;
if (window.getSelection) {
// IE9 and non-IE
sel = current_position;
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
// Range.createContextualFragment() would be useful here but is
// non-standard and not supported in all browsers (IE9, for one)
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);
}
}