Вот более удобный вариант. Заключает выделенную область TEXTAREA между a и b. Я так понял вам именно BB-коды нужны
function compass (a, b)
{
// Ссылка на TEXTAREA
var txt = document.getElementById("txt_1");
// Для Microsoft IE
try {
// Установка фокуса на текстовом поле
txt.focus();
// Создать объект из текущего выделения
var range = document.selection.createRange();
// Изменение выделенной области
range.text = a + range.text + b;
}
// Для Mozilla/Gecko
catch (e) {
// Позиция начала выделения
var start = txt.selectionStart;
// Позиция конца выделения
var end = txt.selectionEnd;
// Изменение выделенной области
txt.value = txt.value.substr(0, start) + a + txt.value.substr(start, end-start) +
b + txt.value.substr(end, txt.value.length);
}
}
Пример использования:
<textarea cols="90" rows="10" id="txt_1"></textarea>
<input type="button" value="Жирный" onclick="compass ('[B]', '[/B]')"/>
<input type="button" value="Курсив" onclick="compass ('[I]', '[/I]')"/>
<input type="button" value="Смайлик" onclick="compass (':-)', '')"/>