[Beschreibung] [Quelltext] [Erläuterung] [Übung] [Referenz]

Beschreibung

Kalender für den aktuellen Monat.

Quelltext


<script language="JavaScript">
<!--
  var date=new Date();
  var dd=date.getDate();
  var mm=date.getMonth();
  var yy=date.getYear();
  document.write("<font size=+2>Kalender für ", mm+1, ".", yy, "</font><br>");
//Wochentag des 1. des Monats ermitteln
  date.setDate(1);
  var kk=date.getDay();
  if(kk == 0)kk=7;
  document.write("<table border>");
  document.write("<tr><th>Mo<th>Di<th>Mi<th>Do<th>Fr<th>Sa<th>So</tr>");
  document.write("<tr>");
//erste Zeile auffuellen
  for(var ii=1; ii<kk; ii++) {
    document.write("<td>");
  }
  for(ii=1; ii<32; ii++) {
    date.setDate(ii);
    if(date.getMonth() != mm)break;
    if(ii == dd) {
//den aktuellen Tag fett
      document.write("<td><b>", ii, "</b>");
    } else {
      document.write("<td>",ii);
    }
    kk++;
    if(kk > 7) {
      document.write("</tr>\n<tr>");
      kk=1;
    }
  }
  document.write("</tr>\</table>");
//-->
</script>

Erläuterung

Es wird zunächst eine Instanz des Date-Objekts mit dem aktuellen Datum erzeugt, anschließend wird der Tag des Monats auf "1" gesetzt. Nun kann bestimmt werden, auf welchen Wochentag der Erste des Monats fällt. Daraus ergibt sich, wie viele leere Felder am Anfang des Kalenders eingefügt werden müssen. Zum Einfügen der leeren Felder wird die erste for-Schleife benutzt. Die zweite for-Schleife läuft von 1 bis 31 und dient dazu, die einzelnen Tage des Monats auszugeben. Um auch Monate mit weniger als 31 Tagen richtig darzustellen, wird die schon auf Seite 05 beschriebene Eigenschaft des Date-Objekts benutzt: wenn das Datum mit setDate() z.B. auf den 31.04. gesetzt wird, korrigiert JavaScript das Datum auf den 01.05. Das hier beschriebene Script prüft jeweils, ob der Monat des erzeugten Datums noch dem aktuellen Monat entspricht. Ist dies nicht der Fall, dann wird die Schleife vorzeitig mit der break-Anweisung abgebrochen.

Übungsaufgabe

1. Ändern Sie den Kalender in einen Advents-Kalender: Die einzelnen Tage sollen jeweils als Link angezeigt werden - allerdings nur für die Tage bis zum aktuellen Datum.
2. Erstellen Sie eine Tabelle mit 9 Zeilen und 9 Spalten, in denen das kleine Ein-mal-Eins dargestellt wird (z.B. in Zeile 3, Spalte 7 soll das Ergebnis von 3*7 stehen).
[
Lösung]


[for] [while] [break] [continue] [for ... in]

for

Mit einer for-Schleife ist es möglich, bestimmte Anweisungen wiederholt zu durchlaufen. Eine solche Schleife hat den allgemeinen Aufbau

for(StartanweisungBedingungZählanweisung) {
  Anweisungsblock
}

Wenn JavaScript eine for-Schleife vorfindet, wird als erstes die Startanweisung ausgeführt. In der Startanweisung wird üblicherweise ein Zähler auf einen Anfangswert gesetzt; z.B. "i=1".
Als nächstes prüft JavaScript, ob der als Bedingung angegebene Ausdruck als Ergebnis den Wert "true" (wahr) liefert. Hier kann z.B. geprüft werden, ob die gewünschte Anzahl der Schleifendurchläufe erreicht ist: "i<=10". Wenn die Bedingung zutrifft, dann wird der zwischen den geschweiften Klammern angegebene Anweisungsblock abgearbeitet.
Danach führt JavaScript die Zählanweisung aus. Eine typische Zählanweisung ist "i++" als Kurzschreibweise für "i=i+1".
Anschließend wird wieder mit der Prüfung der Bedingung weitergemacht.

Einzele Bestandteile innerhalb der for-Anweisung (also Startanweisung, Bedingung oder Zählanweisung) dürfen wahlweise entfallen; das zugehörige ";" muß aber in jedem Fall vorhanden sein.

while

Die Verwendung von while ist eine Alternative zur Definition einer Schleife. Der allgemeine Aufbau ist

while(Bedingung) {
  Anweisungsblock
}

Die Schleife wird so lange durchlaufen, wie die vorgegebene Bedingung erfüllt ist.

In der folgenden Gegenüberstellung wird jeweils die Summe der Zahlen von 1 bis 10 berechnet; einmal unter Verwendung der for-Anweisung und einmal mit while

summe=0;
for(zaehler=1; zaehler<=10; zaehler++) {   
  summe+=zaehler;
}
summe=0;
zaehler=1;
while(zaehler<=10) {   
  summe+=zaehler;
  zaehler++;
}

Häufig anzutreffen sind auch while-Schleifen in Verbindung mit dem logischen Wert "true" als (degenerierte) Bedingung. Damit wird eine zunächst unendliche Schleife definiert; das Abbruchkriterium wird erst innerhalb des Anweisungsblocks überprüft. Die Aufgabe, die Summe der Zahlen von 1 bis 10 zu berechnen könnte damit so gelöst werden:

summe=0;
zaehler=0;
while(true) {
  zaehler++;
  if(zaehler>10)break;
  summe+=zaehler;
}

break

Die break-Anweisung bewirkt, daß die Abarbeitung der Schleife sofort abgebrochen wird; JavaScript springt zur ersten Zeile hinter der Schleife.

continue

Die continue-Anweisung bewirkt, daß die Abarbeitung des Anweisungsblocks für den aktuellen Schleifendurchlauf abgebrochen wird; JavaScript springt ans Ende des Anweisungsblocks, bleibt aber innerhalb der Schleife. Bei for-Schleifen wird mit der Zählanweisung, bei while-Schleifen mit der Prüfung der Bedingung weitergemacht.

for ... in (nicht in MSIE 3.0)

Mit for ... in wird eine Schleife über die Eigenschaften eines Objektes ausgeführt. Die allgemeine Schreibweise ist:
for(prop in object)
Dabei ist prop ein Platzhalter, in dem die Eigenschaften abgelegt werden sollen und object ist das Objekt, dessen Eigenschaften untersucht werden sollen. Zum Beispiel
for(prop in document) {
  document.write(prop, " = ", document[prop], "<br>");
}
liefert folgende Anzeige:


Auf der nächsten Seite werden Funktionen behandelt.

home
Erstellt von © Uwe Brinkmann - bingo e.V. - Stand 08.02.97