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

在特定点使用ExecCommand插入?

  •  1
  • TheWelshManc  · 技术社区  · 7 年前

    我目前正在制作一个所见即所得编辑器,但有一些问题。我试图在中添加链接,但当我添加链接时,会将焦点从div移开,因为用户必须在文本框中键入链接。

    我有一个函数可以获取光标的最后一个位置:

    <div id="editor" contenteditable="true"></div>

    function getCaretCharacterOffsetWithin(element) {
        var caretOffset = 0;
        var doc = element.ownerDocument || element.document;
        var win = doc.defaultView || doc.parentWindow;
        var sel;
        if (typeof win.getSelection != "undefined") {
            sel = win.getSelection();
            if (sel.rangeCount > 0) {
                var range = win.getSelection().getRangeAt(0);
                var preCaretRange = range.cloneRange();
                preCaretRange.selectNodeContents(element);
                preCaretRange.setEnd(range.endContainer, range.endOffset);
                caretOffset = preCaretRange.toString().length;
            }
        } else if ( (sel = doc.selection) && sel.type != "Control") {
            var textRange = sel.createRange();
            var preCaretTextRange = doc.body.createTextRange();
            preCaretTextRange.moveToElementText(element);
            preCaretTextRange.setEndPoint("EndToEnd", textRange);
            caretOffset = preCaretTextRange.text.length;
        }
        return caretOffset;
    }
    
    var update = function() {
      getCaretCharacterOffsetWithin(this);
    };
    $('#editor').on("mousedown mouseup keydown keyup", update);
    

    编辑:添加了一个JSFIDLE来查看事情是如何工作的- https://jsfiddle.net/hju3bLyx/2/

    1 回复  |  直到 7 年前
        1
  •  1
  •   ewwink    7 年前

    当编辑器失去焦点时,需要保存所选内容

    var savedSel;
    
    function createLink() {
      $('#editor').focus();
      var url = document.getElementById("url").value;
      restoreSelection(savedSel);
      document.execCommand("CreateLink", false, url);
    }
    
    // it saved here
    $('#editor').focusout(function(){
        savedSel = saveSelection();
    })