Substring

Hallo,

vielleicht kennt ihr es schon von manchen Foren. Ich möchte dem User anbieten in einem Textfeld (textarea) seinen Text zu formatieren. Es soll so sein, das er den Textausschnitt nur mit der Maus makieren muß und auf einen Button „Text in fett“ drückt. Der makierte Text bekommt dann ein selbst ernanntes Tag, z. Beispiel: „Hallo Welt“ ist dann „Hallo Welt“.

Ich habe mir schon einiges aus dem Netz zusammen kopiert was auch sehr gut funktioniert. Allerdings habe ich noch folgendes Problem.

Wenn ich zum Beispiel ein „e“ makiere, dann sucht er nach allen "e"´s die es in dem Script gibt und setzt den Tag herum.
Er soll aber nur um den makierten Text ein Tag setzen.

Anbei habe ich euch meinen Quelltext gehängt.
Es würde mich sehr freuen wenn ich bald eine Antwort von euch bekommen könnte.

Vielen Dank im Vorraus!!!

Gruß Björn

HIER DER QUELLCODE:

Test
<!–
function SuchenUndErsetzen(QuellText)
{
if (window.getSelection)
{
SuchText = window.getSelection();
ErsatzText = „" + window.getSelection() + "“;
}
else if (document.getSelection)
{
SuchText = document.getSelection();
ErsatzText = „" + document.getSelection() + "“;
}
else if (document.selection)
{
SuchText = document.selection.createRange().text;
ErsatzText = „" + document.selection.createRange().text + "“;
}

if ((QuellText == null) || (SuchText == null)) { return null; }
if ((QuellText.length == 0) || (SuchText.length == 0)) { return QuellText; }

if ((ErsatzText == null) || (ErsatzText.length == 0)) { ErsatzText = „“; }

var LaengeSuchText = SuchText.length;
var LaengeErsatzText = ErsatzText.length;
var Pos = QuellText.indexOf(SuchText, 0);

while (Pos >= 0)
{
QuellText = QuellText.substring(0, Pos) + ErsatzText + QuellText.substring(Pos + LaengeSuchText);
Pos = QuellText.indexOf(SuchText, Pos + LaengeErsatzText);
}

return QuellText;
}
//–>

viel Text zum Selektieren

Hi Björn

while (Pos >= 0)
{
QuellText = QuellText.substring(0, Pos) + ErsatzText

  • QuellText.substring(Pos + LaengeSuchText);
    Pos = QuellText.indexOf(SuchText, Pos +
    LaengeErsatzText);
    }

Mit genau dieser Schleife gehst du ja deinen Text nacheinander durch und ersetzt alle Vorkommnisse deines Suchstrings.
Daher werden alle „e“ durch e ersetzt, so auch in deinem Fall alle „el“.

Du müsstest also die Position des selektierten Bereichs in deinem Text wissen und dann nur genau diesen Bereich ersetzen.

Dies ist wohl etwas schwierig und ich habe auf die Schnelle keine Lösung gefunden. Vielleicht gibt es neben getSelection() auch noch eine Methode, die dir die Position des sel. Bereichs zurückliefert?

=> Problem lokalisiert aber leider nicht gelöst :frowning:

Ciao, Bill

Hallo,

vielleicht entspricht das deinen Vorstellungen:

...

\<!--
function SuchenUndErsetzen(QuellText)
{
document.selection.createRange().text = 
 "[b\>" + document.selection.createRange().text + "\</b]";
}
//--\>

viel Text zum SelektierenONCLICK=„javascript:return SuchenUndErsetzen(this.form.text.value);“>

Gruss
Patrick

Hallo Patrick,

du hast mir vor einiger Zeit ein Script zukommen lassen, daß es mir ermöglicht einen String zu ersetzen.

Nun, mit einem Button funktioniert dass Script hervorragend. Nur mit einer SELECT-Box bekomme ich es einfach nicht hin. Ich möchte in der SELECT BOX die Möglichkeit geben, eine Farbe auszuwählen. Wenn man eine Farbe auswählt, wird dies in dem Textarea Feld mit dem Tag [FARBE=Blau]…[/FARBE] usw. gekennzeichnet.

Wenn ich in der SELECT-Box mit ONCHANGE (ONCHANGE=„javascript: return blau(this.form.text.value);“) die Funktion aufrufe, funzt das nicht, da ich nicht weiß wie ich den Wert der SELECT-Box an die Funktion übergebe.

Hast du eine Idee oder noch besser eine Lösung?

Danke für deine Mühe.

Gruß Björn

Hallo,

vielleicht entspricht das deinen Vorstellungen:

<!–
function SuchenUndErsetzen(QuellText)
{
document.selection.createRange().text =
„[b\>“ + document.selection.createRange().text + „\</b]“;
}
//–>

viel Text zum Selektieren