Editing Iframe Content in IE - problem in maintaining text selection

后端 未结 3 1051
春和景丽
春和景丽 2020-12-12 02:01

can somebody please guide me the proper way if this is possible? I was actually trying to make a text editor using iframe with designMode=\'on\'. The buttons in the editing

相关标签:
3条回答
  • 2020-12-12 02:09

    In IE9 I fixed this problem by adding property unselectable="on" for all div-buttons.

    <div onclick="onBold()" unselectable="on">Bold</div>
    
    0 讨论(0)
  • 2020-12-12 02:31

    You mean your buttons are inside the iframe? If they are, just try to take them out.

    If not, you should try something like:

    • You add a and an element (which do not exist but who cares, it'll work) just before and just after the range that way:

      range.pasteHTML( "" + range.htmlText + "" );

    • Than, you'll do your stuff with execCommand and so on.

    • After that, you'll restore the focus by creating a range, getting references to the start and the end elements, making the range contain one of them, move the other endpoint of the range to the other, select the range and remove the start and the end elements from the DOM and from memory.

    I've done something like that for one of my projects but it was long ago so I might have forgotten something. It would be nice of you could upload your code on pastebin or something so that we can tackle the problem directly.

    0 讨论(0)
  • 2020-12-12 02:33

    If you're not changing the editor frame's DOM between it losing and regaining focus then the following functions will do: call saveSelection(iframeWindow) before the editor document loses focus and restoreSelection(iframeWindow, sel) after it regains focus. Otherwise, I'd suggest using my Rangy library's save/restore selection module, which uses hidden marker elements.

    var saveSelection, restoreSelection;
    if (window.getSelection) {
        // IE 9 and non-IE
        saveSelection = function(win) {
            var sel = win.getSelection(), ranges = [];
            if (sel.rangeCount) {
                for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                    ranges.push(sel.getRangeAt(i));
                }
            }
            return ranges;
        };
    
        restoreSelection = function(win, savedSelection) {
            var sel = win.getSelection();
            sel.removeAllRanges();
            for (var i = 0, len = savedSelection.length; i < len; ++i) {
                sel.addRange(savedSelection[i]);
            }
        };
    } else if (document.selection && document.selection.createRange) {
        // IE <= 8
        saveSelection = function(win) {
            var sel = win.document.selection;
            return (sel.type != "None") ? sel.createRange() : null;
        };
    
        restoreSelection = function(win, savedSelection) {
            if (savedSelection) {
                savedSelection.select();
            }
        };
    }
    
    0 讨论(0)
提交回复
热议问题