Window.getSelection在设置为另一个对象后发生更改(参考问题?)

时间:2017-11-16 10:44:52

标签: javascript jquery sweetalert getselection

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:

  • current_position = Selection {anchorNode:text,anchorOffset:27,focusNode:text,.... etc。

但在sweetalert显示之后,current_position更改为:

  • current_position = Selection {anchorNode:div.swal2-modal.swal2-show,anchorOffset:9,focusNode:div.swal2-modal.swal2-show,.... etc。

我在第一次设置后尝试冻结/深度冻结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);
                                }
                            }

0 个答案:

没有答案