在内容可编辑DIV中的选定文本周围包装bb代码

end*_*ndy 4 html javascript jquery

所以我正在尝试创建一个RTE环境.我有一个内容可编辑的div,我想允许用户选择文本,然后按一个按钮,将BBCode包裹在它周围.

我尝试创建以下函数,但是,所选文本只是被替换.它似乎没有存储适当的值ein selectedText

function wrap(tag) 
{


    var sel, range;
    if (window.getSelection)
     {
        sel = window.getSelection();
        if (sel.rangeCount)
         {
            range = sel.getRangeAt(0);
            var selectedText = range;
            range.deleteContents();
            range.insertNode(document.createTextNode('['+tag+']'+selectedText+'[/'+tag+']'));
        }
    } 
    else if (document.selection && document.selection.createRange) 
    {
        range = document.selection.createRange();
        selectedText = document.selection.createRange().text;
        console.log(text);
        range.text = '['+tag+']'+text+'[/'+tag+']';
    }
}


</script>
Run Code Online (Sandbox Code Playgroud)

JQuery是可以接受的,但我更喜欢常规的Javascript.

Sel*_*gam 6

更改selectedText = range;selectedText = range.toString();.范围是一个对象,当你执行deleteContents时,它会清除数据,因此它不会被删除.

DEMO

JS:

function wrap(tag) {
    var sel, range;
    var selectedText;
    if (window.getSelection) {
        sel = window.getSelection();

        if (sel.rangeCount) {
            range = sel.getRangeAt(0);
            selectedText = range.toString();
            range.deleteContents();
            range.insertNode(document.createTextNode('[' + tag + ']' + selectedText + '[/' + tag + ']'));
        }
    }
    else if (document.selection && document.selection.createRange) {
        range = document.selection.createRange();
        selectedText = document.selection.createRange().text + "";
        range.text = '[' + tag + ']' + selectedText + '[/' + tag + ']';
    }

}
Run Code Online (Sandbox Code Playgroud)