Man muß ja, wenn der Anwender einen Button anklickt, dem markierten Text ein Format zuweisen. Aber in Javascript kann man über selected bzw. getselected ja nur den Inhalt der Markierung auslesen, man erfährt nicht, welche Stelle im Gesamttext markiert ist...
Das kann man durchaus auslesen über DOM Selection und Range (siehe auch https://developer.mozilla.org/en/DOM/selection und https://developer.mozilla.org/en/dom:range).
Das Formatieren selbst wird meist mit document.execCommand (siehe auch HTML5) oder eben DOM-Operationen auf Basis von Selection/Range gelöst.
Auch stellen die obengenannten Seiten den zu bearbeitenden Text offenbar in einem Textfeld dar (textarea), was die Bearbeitung durch den Anwender natürlich einfacher macht. Aber wie erzeugt man ein Textfeld, das HTML-Formate anezigt?
Es ist keine textarea. Es ist ein normales HTML mit dem contentEditable-Flag bzw. ein iframe mit einem Dokument mit dem designMode-Flag. Schau dir das mal im DOM Inspector von Firebug oder Chrome/Safari an.
Die textarea existiert höchstens als Fallback. Intern wird natürlich HTML-Code erzeugt.
Wenn du mal nach »Lightweight RTE« (RTE = Rich text editing) oder ähnlichem suchst, findest du viele kleine überschaubare Scripte, die diese Basistechniken verwenden. Hier etwa ein Beispiel für jQuery: http://code.google.com/p/rte-light/source/browse/trunk/jquery.rte.js – Da wirst du execCommand, die Selection-API und designMode/contentEditable wiederfinden.
Mathias