Sönke Tesch: Syntaxfehler - behoben :o)

Beitrag lesen

ich habe jetzt zwar zweimal fast dasselbe geschrieben,
aber ich bin mir nicht ganz sicher, ob ihr die Antwort auf den Beitrag auch lest.  Ich möchte mich bedanken, denn das Problem ist gelöst.

Nein, zumindest nicht mit dem Skript, daß Du unten zitiert hast.

Ich habe als erstes ausprobiert, einfach
else {} als leere Anweisung zu schreiben und das war es auch! Jetzt läuft der Kram auch ohne Fehlermeldung - supi!

Es läuft jetzt zwar ohne Fehlermeldung, aber es ist nicht das, was Du haben wolltest. Du hast jetzt zwar einen leeren else-Block, aber der hat nicht das Problem gelöst, sondern die beiden Klammern im else-Block. Hättest Du die Klammern um die Anweisungen geschrieben, die er bei else ausführen soll, wäre die Fehlermeldung sicherlich auch verschwunden.

Was Du jetzt machst, ist in mehreren Teilen unsinnig. Erstens kannst Du statt einem leeren, nichts tuenden else das else auch gleich weglassen, zweitens hast Du in Zeile 11 eine Anweisung, die überhaupt keine Funktion hat. Du vergleichst dort das Ergebnis von indexOf() mit -1, lässt aber das Ergebnis dieses Vergleichs einfach im Nirvana verschwinden; keine Zuweisung an eine Variable, kein if, das es benutzt.
Führe Dir das Skript besser nochmal genau zu Gemüte, um überhaupt zu verstehen, was dort passiert.

1 a = window.location.href;
 2 function color_a()
 3  {
 4   if (a.indexOf('c2')!=-1)
 5     {
 6      a = a.replace(/c2/,"c1");
 7      window.location.href = a;
 8     }
 9    else
10     {};
11   (a.indexOf("c3")!=-1)
12   a = a.replace(/c3/,"c1");
13   window.location.href = a;
14  }

Um die Geschichte mal etwas abzukürzen: Du möchtest in window.location.href c2 und/oder c3 durch c1 ersetzen.

window.location.href = window.location.href.replace(/c2|c3/g,"c1");

In der Kürze liegt die Würze :)

  • window.location.href ist ein String-Objekt, d.h. Du kannst alle String-Methoden auch direkt anwenden, auch replace().
  • replace() ersetzt Textstellen. Wenn keine passenden Textstellen vorhanden sind, wird auch nichts ersetzt, von daher sind jeglich Vorprüfungen, ob eine Textstelle vorhanden ist, überflüssig.
  • replace() nimmt auch komplexe Muster an. So steht der senkrechte Strich für ein "oder". "c2|c3" bedeutet also "c2 oder c3", es wird also "c2 oder c3" durch c1 ersetzt. Damit sparst Du den zweiten replace()-Aufruf.
  • Zusätzlich: Das kleine g am Ende des Musters ("/c2|c3/g") bedeutet, daß replace() alle Vorkomnisse ersetzen soll ("c2c2c2"->"c1c1c1"). Ohne g wird nur das erste "c2" bzw. "c3" ersetzt ("c2c2c2->"c1c2c2"). Ich weiß nicht, welche Variante Du haben möchtest.

Gruß,
  soenk.e