Hi,
Zwar funktioniert das Einfügen an der Cursorposition browserübergreifend, war aber bereits Text selektiert, wird dieser bei den BB-Codes nicht berücksichtigt.
Was genau meinst du damit?
Ich hab jetzt mal nur mit dem Firebug unter FF 3.0.4 reindebuggt.
Was passiert, wenn ich TEXT markiert habe, und dann [I] verwende - ich erhalte [I]TEXT[/I]TEXT, und der Cursor wird um ein paar Zeichen hinter dem zweiten TEXT platziert.
Die Funktion getSelectedText() ist noch die alte und beißt sich mit dem Rest.
getSelectedText liefert lediglich das selektierte Textstück zurück, und das soweit ich sehen kann korrekt.
In addText allerdings an folgender Stelle
else if(typeof input.selectionStart != 'undefined') // Firefox ************************
{
var start = input.selectionStart;
var end = input.selectionEnd;
var insText = input.value.substring(start, end);
input.value = input.value.substr(0, start) + theTag + insText + theClsTag + input.value.substr(end);
var pos;
if (insText.length == 0) {
pos = start + theTag.length;
} else {
pos = start + theTag.length + insText.length + theClsTag.length;
}
enthält theTag bereits "[I]TEXT[/I]" und insText nach der Zuweisung auch noch mal "TEXT".
Das führt in der Zeile mit input.value = ... dazu, dass zu viel Text eingefügt wird, und im else-Zweig des nachfolgenden If dazu, dass pos (für die Platzierung des Cursors nach dem Einfügen) zu weit gesetzt wird.
Nimmt man an den beiden Stellen + insText bzw. + insText.length heraus, dann klappt das Einfügen eines I-Tags um den marktierten Text erst mal.
Ergebnis bezogen auf erwähnte FF-Version - der darüber liegende Zweig für MSIE benötigt ggf. analoge Korrekturen;
Und ich habe auch nur flüchtig geprüft, ob sich das evtl. in anderen Fällen negativ auswirkt. Dann könnte man nicht einfach wie oben den Code editieren, sondern müsste noch weitere Fallunterscheidungen treffen, wann insText benötigt wird und wann nicht.
MfG ChrisB
Light travels faster than sound - that's why most people appear bright until you hear them speak.