【问题标题】:Javascript wrap text with tags bbcode?Javascript用标签bbcode包装文本?
【发布时间】:2012-03-07 00:52:01
【问题描述】:
有没有用标签来包装 textarea 文本?
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>
希望我能找到解决办法
就是这样,谢谢。
【问题讨论】:
标签:
javascript
jquery
bbcode
【解决方案1】:
这就是解决办法
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));
}
【解决方案2】:
用途
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;
}