Hi Jörg,
da ich erst neulich wieder so eine Funktion brauchte ging ich von dieser aus und habe sie verbessert. Der markierte Text wird nun von den Tags umschlossen und nicht ersetzt, der Cursor nach den Endtag gesetzt bzw. für Tags wie url lässt sich ein Offset angeben, sodass der Cursor gleich danach an der gewünschten Position im Tag steht. Dachte mir, Du kannst das brauchen.
Javascript:
function cur_ins(field, startTag, endTag, offset) {
field.focus();
if (document.getSelection) { //FF, NS
selStart = field.selectionStart;
selEnd = field.selectionEnd;
text = field.value.substring(selStart, selEnd);
field.value = field.value.substring(0, selStart) + startTag + text + endTag + field.value.substring(selEnd);
if (text.length > 0) {
if (offset != 0) {
field.selectionStart = selStart + startTag.length + text.length - offset;
} else {
field.selectionStart = selStart + startTag.length + text.length + endTag.length;
}
} else {
field.selectionStart = selStart + startTag.length;
}
field.selectionEnd = field.selectionStart;
} else
if (document.selection) { //IE
marker = document.selection.createRange();
text = marker.text;
marker.text = startTag+text+endTag;
marker = document.selection.createRange();
if (text.length > 0) {
if (offset != 0) {
marker.move('character', startTag.length + text.length - offset);
} else {
marker.move('character', startTag.length + text.length + endTag.length + offset);
}
} else {
marker.move('character', -(endTag.length));
}
marker.select();
}
}
Html-Snippet:
<input type="button" class="button klein" value="fett" onclick="cur_ins(this.form.text, '[ b]', '[/ b]', 0);" name="fett" />
<input type="button" class="button klein" value="Link" onclick="cur_ins(this.form.text, '[url=', '][/url]', -1);" name="link" />
Beim HTML-Snippet konnte ich natürlich den richtigen b-Tag nicht verwenden und habe ihn gespaced. Der Offset tritt dann in Kraft, wenn ein Text markiert wurde und ein bb-Tag eingefügt wird, welcher aus mehreren Teilen besteht (bei Dir nur url, ich brauchte das für einen color-tag).
Nachtrag: hab nochmal die neuere Version der Funktion draufgepackt, da ich für das CM noch ein bisschen dran rumgetipselt habe.