如何使用 javascript 使用 bbcode 包装 select 文本

How to wrap select text with bbcode using javascript

请给我这个 javascript 代码,我想让它用 bbcode 示例 [b]peter[/b] 包裹选定的文本,但对我不起作用,有人可以修复它或给我想法吗是吗?

<script type="text/javascript">
function bbcoder(){
            var old = "";
            var value = textarea.value;
            var startPos = textarea.selectionStart;
            var endPos = textarea.selectionEnd;
            var selectedText = value.substring( startPos, endPos );

function bbbold(){
var old=document.getElementsByName("blog_body")[0].value; 
document.getElementsByName("blog_body")[0].value=old+"[b]"+ selectedText +"[/b]";
} 

function bbitalic(){ 
var old=document.getElementsByName("blog_body")[0].value; 
document.getElementsByName("blog_body")[0].value=old+"[i]"+ selectedText +"[/i]";

} 

function bbunder(){
var old=document.getElementsByName("blog_body")[0].value; 
document.getElementsByName("blog_body")[0].value=old+"[u]"+ selectedText +"[/u]";} 

function bbquote(){
var old=document.getElementsByName("blog_body")[0].value; 
document.getElementsByName("blog_body")[0].value=old+"[quote]"+ selectedText +"[/quote]";
}
</script>

这是html表格

<div id="editor">
    <ul id="buttons">
        <li><a href="javascript:void(0);" onclick="bbbold()">B</a></li>
       <li><a href="javascript:void(0);" onclick="bbunder()"><u>U</u></a></li>
        <li><a href="javascript:void(0);" onclick="bbitalic()">I</a></li>
        <li><a href="javascript:void(0);" onclick="bbquote()">""</a></li>
    </ul>
    <form id="editor-form" action="" method="post">
        <div>
            <textarea id="blog_body" name="blog_body" rows="15" cols="20" placeholder="Use editor buttons on selected text"></textarea>
        </div>
        <p><input type="submit" value="Save"></p>
    </form>
</div>

更新:jsFiddle请注意,我无法在 jsFiddle 中使用函数内部函数,因此不得不将它们移出。

试试下面的代码

function bbcoder(code) {
    try {
        var old = "";
        var textarea = document.getElementsByName("blog_body")[0];
        var value = textarea.value;
        var startPos = textarea.selectionStart;
        var endPos = textarea.selectionEnd;
        var selectedText = value.substring(startPos, endPos);


        switch (code) {
            case 'B':
                bbbold();
                break;
            case 'U':
                bbunder();
                break;
            case 'I':
                bbitalic();
                break;
            case 'Q':
                bbquote();
                break;
            default:
                alert('Invalid argument');
                break;
        }

        function bbbold() {
            var old = textarea.value;
            textarea.value = old.replaceBetween(startPos, endPos, "[b]" + selectedText + "[/b]");
        }

        function bbitalic() {
            var old = textarea.value;
            textarea.value = old.replaceBetween(startPos, endPos, "[i]" + selectedText + "[/i]");

        }

        function bbunder() {
            var old = textarea.value;
            textarea.value = old.replaceBetween(startPos, endPos, "[u]" + selectedText + "[/u]");
        }

        function bbquote() {
            var old = textarea.value;
            textarea.value = old.replaceBetween(startPos, endPos, "[quote]" + selectedText + "[/quote]");
        }

    } catch (e) {
        alert(e.toString());
    }

}

//
String.prototype.replaceBetween = function (start, end, what) {
    return this.substring(0, start) + what + this.substring(end);
};