Esempio da cui puoi trarre spunto:

Spezzone di HTML:

<textarea class="other" name="Testo" onselect="storeCaret();" onclick="storeCaret();" onkeyup="storeCaret();">In preparazione... </textarea>
<input class="button" type="button" value="A capo" onclick="docmd('ACapo');document.forms[0].elements[3].focus();">

Funzioni javascript usate:

function storeCaret ()
{
if (document.forms[0].elements[3].createTextRange)
document.forms[0].elements[3].caretPos = document.selection.createRange().duplicate();
}

function insertAtCaret (text)
{
if (document.forms[0].elements[3].createTextRange && document.forms[0].elements[3].caretPos) {
var caretPos = document.forms[0].elements[3].caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
}
else
document.forms[0].elements[3].value = text;
}

function seltext()
{
if (document.getSelection)
{
var str = document.getSelection();
}
else if (document.selection && document.selection.createRange)
{
var range = document.selection.createRange();
var str = range.text;
}
else
{
var str = "";
}
return str;
}

function docmd(comm) {
switch (comm) {
case "ACapo":
if (seltext()=="")
insertAtCaret("
\n");
break;
case "Titolo" :
if (seltext()=="")
insertAtCaret(" <div class='titolo'> </div>\n");
else
insertAtCaret(" <div class='titolo'> " + seltext() + " </div>\n")
break;
case "STitolo" :
if (seltext()=="")
insertAtCaret(" <div class='sottotitolo'> </div>\n");
else
insertAtCaret(" <div class='sottotitolo'> " + seltext() + " </div>\n")
break;
case "Grass" :
if (seltext()!="")
insertAtCaret(" " + seltext() + " ");
break;
case "Link" :
if (seltext()!="") {
value=prompt("Inserisci l'indirizzo di destinazione completo di http:// nella casella sottostante","");
insertAtCaret(" " + seltext() + " ");}
break;
case "Link2" :
if (seltext()!="") {
value=prompt("Inserisci l'indirizzo di destinazione completo di http:// nella casella sottostante","");
insertAtCaret(" [img]img/bull.gif[/img] " + seltext() + " ");}
break;
case "Immagine" :
if (seltext()=="")
insertAtCaret(" <img> ");
break;
default :
break;
}
}

Tutto ciò però funziona solo sotto IE.

Ciao!