在contenteditable的选择之前和之后插入文本

有没有办法在contenteditable div中选定的文本之前和之后插入类似于bbcode的文本? 我已经看到了许多textarea的答案,但代码不适用于一个可以满足需求的div。 IE支持是不需要的。


我建议的方法是:

  • 从选择中获得一个范围
  • 在范围的末尾插入一个文本节点
  • 在范围的开头插入另一个文本节点
  • 重新选择原文
  • 以下演示适用于除IE <= 8之外的所有主流浏览器。

    演示:http://jsfiddle.net/8WEru/

    码:

    function surroundSelection(textBefore, textAfter) {
        if (window.getSelection) {
            var sel = window.getSelection();
            if (sel.rangeCount > 0) {
                var range = sel.getRangeAt(0);
                var startNode = range.startContainer, startOffset = range.startOffset;
    
                var startTextNode = document.createTextNode(textBefore);
                var endTextNode = document.createTextNode(textAfter);
    
                var boundaryRange = range.cloneRange();
                boundaryRange.collapse(false);
                boundaryRange.insertNode(endTextNode);
                boundaryRange.setStart(startNode, startOffset);
                boundaryRange.collapse(true);
                boundaryRange.insertNode(startTextNode);
    
                // Reselect the original text
                range.setStartAfter(startTextNode);
                range.setEndBefore(endTextNode);
                sel.removeAllRanges();
                sel.addRange(range);
            }
        }
    }
    

    如果我从您的意见中了解到新目标,那么您有一个选择并希望通过元素将其包围。 然后range的surroundContents方法应该工作:

    var selection = window.getSelection();
    var range = selection.getRangeAt(0);
    var strong = document.createElement('strong');
    range.surroundContents(strong);
    
    链接地址: http://www.djcxy.com/p/41633.html

    上一篇: Insert text before and after selection in a contenteditable

    下一篇: How to get selected text with JavaScript