Javascript обернуть текст тегами bbcode?

есть ли способ обернуть текст текстового поля тегами? Javascript / JQuery

B = жирный I = курсив U = подчеркнутый S = зачеркнутый

Например:

-+-+-+-+-
 B I U S
-+-+-+-+-
<textarea>
 Some text here
</textarea>

Когда я выделю «здесь», а затем нажму жирным шрифтом, это будет что-то вроде этого.

-+-+-+-+-
 B I U S
-+-+-+-+-
<textarea>
 Some text [b]here[/b]
</textarea>

Надеюсь, я найду решение, и все, спасибо.


person ThElitEyeS    schedule 07.03.2012    source источник


Ответы (2)


это решение

function wrapText(elementID, openTag, closeTag) {
    var textArea = $('#' + elementID);
    var len = textArea.val().length;
    var start = textArea[0].selectionStart;
    var end = textArea[0].selectionEnd;
    var selectedText = textArea.val().substring(start, end);
    var replacement = openTag + selectedText + closeTag;
    textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len));
}
person ThElitEyeS    schedule 07.03.2012

использование

console.log(parseBB('[b]hello [/b][u]world[/u]'));
console.log(parseBB(document.getElementById('textareaID').value));
console.log(parseBB($('#textareaID').val()));

прецедент

$('#output-container').html(parseBB($('#textareaID').val()));

..

function parseBB(string){
var _string = string.replace(/\n/g, '<br>'),
parseExp = new RegExp(/^(.*)\[(b|u|i|s)\]([A-Za-z0-9 ._-]+)\[\/[a-z]+\](.*)$/g);

(function run(){
    if(parseExp.test(_string)){
        _string = _string.replace(parseExp , '$1<$2>$3</$2>$4');
        run();
    }
})();
return _string;
}
person trojan_spike    schedule 21.10.2013