代码之家  ›  专栏  ›  技术社区  ›  Nick

Webkit,即取消选择文本

  •  1
  • Nick  · 技术社区  · 14 年前

    toolBar.onmousedown=function(){return false};
    

    这在Firefox和Opera中运行良好。我试着用

    toolBar.onselectstart = function(){return false};
    

    2 回复  |  直到 14 年前
        1
  •  4
  •   dhundsness    13 年前

    一个简单的替代方法是对工具栏使用<button>标记。这样一来,它就不会丢失文本选择。

        2
  •  0
  •   Nick    14 年前

    在mouseup上,我捕捉选择信息:

    $.getSelection = function() {
        // ie has its own way of doing things from here on.
        if($.browser.msie) return document.selection.createRange();
    
        if (window.getSelection) {
            var selection = window.getSelection();
        }
        else if (document.selection) { // should come last; Opera!
            var selection = document.selection.createRange();
        }
    
        if (selection.getRangeAt)
            var range = selection.getRangeAt(0);
        else { // Safari!
            var range = document.createRange();
            range.setStart(selection.anchorNode, selection.anchorOffset);
            range.setEnd(selection.focusNode, selection.focusOffset);
        }
        if (!range.toString().match(/[^\t\r\n ]/)) return false;
    
        var ret = {};
    
        // start end length text
    
        ret.startContainer  = range.startContainer;
        ret.start   = range.startOffset;
        ret.endContainer    = range.endContainer;
        ret.end     = range.endOffset;
        ret.length = ret.end - ret.start;
        ret.collapsed   = range.collapsed;
    
        return ret;
    };
    

    这是存储在你选择的地方。

    function handleReselection() {
        if($.browser.msie) {
            return this.selection;
        }
        else {
            setSelection(this.selection);
            return document
        }
    }
    
    function setSelection(selection) {
        var sel = window.getSelection();
        sel.removeAllRanges();
        var range = document.createRange();
        range.setStart(selection.startContainer, selection.start);
        range.setEnd(selection.endContainer, selection.end);
        sel.addRange(range);
    }
    
    handleReselection().execCommand('bold', false, null);