在文本选择之前/之后添加元素

opt*_*sta 8 javascript jquery text range selection

我正在寻找允许我在选定文本之前或之后构建一些元素的函数.像这样的javascript取代所有浏览器的选择,但是在选择之前或之后添加一些内容而不是替换它,比如after()before()jQuery方法.我应该使用一些DOM选择方法,如果是哪一个?或者确实存在更容易实现的东西?

Tim*_*own 13

这是一对执行此操作的功能.

实例:http://jsfiddle.net/hjfVw/

码:

var insertHtmlBeforeSelection, insertHtmlAfterSelection;

(function() {
    function createInserter(isBefore) {
        return function(html) {
            var sel, range, node;
            if (window.getSelection) {
                // IE9 and non-IE
                sel = window.getSelection();
                if (sel.getRangeAt && sel.rangeCount) {
                    range = window.getSelection().getRangeAt(0);
                    range.collapse(isBefore);

                    // 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);
                }
            } else if (document.selection && document.selection.createRange) {
                // IE < 9
                range = document.selection.createRange();
                range.collapse(isBefore);
                range.pasteHTML(html);
            }
        }
    }

    insertHtmlBeforeSelection = createInserter(true);
    insertHtmlAfterSelection = createInserter(false);
})();
Run Code Online (Sandbox Code Playgroud)