Optionen und weiterführende Links



In der Datenbank befinden sich derzeit 477 Specials. Alle Specials anzeigen...

document

document

Das document-Objekt repräsentiert das HTML-Dokument im aktuellen Browserfenster. Damit könnt Ihr beispielsweise per JavaScript HTML-Code ergänzen. Dazu dienen die Funktionen write() und writeln()

<p>Vor dem write</p>

<script type="text/javascript">
<!--
  var name = window.prompt("Gib bitte Deinen Namen ein");
  document.open(); // öffne das Dokument
  // gebe den eingegebenen Namen aus
  document.write("<p>Hallo, " + name + "</p>");
  document.close(); // schließe das Dokument
//-->

</script>

<p>Nach dem write</p>

Bevor Ihr in das Dokument schreiben könnt, müßt Ihr das Dokument mit open() öffnen. Wenn das aktuelle Dokument noch geladen wird, wird es ergänzt; der Teil vorher und nachher bleibt also erhalten. Wenn jedoch das aktuelle Dokument bereits fertig geladen ist, löscht open() den Inhalt des aktuellen Dokuments, so daß ein folgendes write() auf eine leere, weiße Seite schreibt. Nach dem Schreiben wird das Dokument mit der Funktion close() wieder geschlossen. writeln() tut dasselbe wie write(), hängt aber zusätzlich noch einen Zeilenumbruch an.

Meist wird das document-Objekt dazu verwendet, auf bestehende HTML-Elemente zuzugreifen und deren Eigenschaften zu ändern. Das wird beispielsweise bei den verbreiteten RollOver-Effekten genutzt: Wenn der Mauszeiger beispielsweise über ein Bild fährt, leuchtet dieses auf. Dazu bereitet Ihr zwei Bilder vor, das «normale» und das «leuchtende». Zum Umschalten ändert Ihr einfach den Inhalt des src-Attributs des img-Tags. Dazu müßt Ihr jedoch auf das img-Element zugreifen, und genau da beginnt das Problem: Das funktioniert nicht bei jedem Browser auf die gleiche Weise.

DOM, aber keine Kirche

Die neueren Version des Internet Explorers (ab 5.0) und von Netscape (ab 6.0) halten sich an die offiziellen Standards des W3C und haben das DOM implementiert. DOM steht für Document Object Model. Dabei werden die HTML-Elemente in einem Baum organisiert

<html>

<head></head>

<body bgcolor="darkgray">

  <p>
    Der erste Absatz
  </p>

  <p>
    Der zweite Absatz
    <img src="bild.jpg">

    noch mehr Text
  </p>

</body>

</html>
Beispiel DOM-Tree
Das links gezeigte HTML-Beispiel als DOM-Tree

Jedes HTML-Element wird in diesem Baum als Knoten dargestellt. Auch der Text in einem HTML-Element und die Attribute eines Elements sind eigene Knoten, im Beispiel dargestellt als Rechtecke bzw. als Rauten. Beim Umgang mit Bäumen (zumindest dieser Spielart) sind drei Begriffe wichtig, die Ihr auch für den Umgang mit dem DOM kennen solltet

Wurzel (engl. root)
Im Gegensatz zu den Bäumen im Wald hat diese Art von Bäumen die Wurzel oben. Die Wurzel ist der einzige Knoten, der keinen Elternknoten hat. In unserem Beispiel ist der 'html'-Knoten die Wurzel.
Kind (engl. child)
Jeder Knoten in einem Baum kann einen oder mehrere Kindsknoten haben. Beispielsweise ist 'body' ein Kind von 'html', und der Attributsknoten 'bgcolor=darkgray' ist ein Kind von 'body'.
Eltern (engl. parent)
Umgekehrt hat jeder Knoten (außer der Wurzel) genau einen Elternknoten. Der Elternknoten des Textknotens 'Der erste Absatz' ist beispielsweise der erste 'p'-Knoten.

Es ist im ersten Moment etwas ungewohnt, in solchen Begriffen zu denken, aber es hat (nicht nur beim DOM) viele Vorteile.

Von Knoten und IDs

Die Knoten im DOM-Baum sind Objekte der Klasse node. Diese Objekte haben Eigenschaften wie childNodes (ein Array mit allen Kindsknoten dieses Knotens) oder nextSilbling (der nächste Kindsknoten desselben Elterknotens) und Funktionen wie appendChild() (hängt einen neuen Kindsknoten an diesen Knoten als Elternknoten) oder hasChildNodes() (prüft, ob dieser Knoten Kindsknoten hat). Damit könnt Ihr Euch im Baum bewegen und ihn bearbeiten. Als Beispiel nehmen wir ein p-Element, das auf Klick seinen Inhalt ändert

<script type="text/javascript">
<!--
  function changeIt()
    {
    // greife auf das Element mit dieser ID zu
    var element = document.getElementById('der_text');
    // das erste Kind dieses Elements (der Textknoten)
    var text = element.firstChild;
    // ändere den Inhalt des Textknotens
    // -> den Text im Element mit der ID 'der_text'
    text.data = "geaendert!";
    }
//-->

</script>
...
<p id="der_text" onClick="changeIt()">
  Klick mich!
</p>

Für den ersten Zugriff auf den Knoten wird in diesem Beispiel die Funktion getElementById() des document-Objekts benutzt. Die Funktion liefert den Knoten, der die übergebene ID im Attribut 'id' trägt. In unserem Fall ist das das p-Element. Der Text innerhalb des p-Elements steht im ersten Kindsknoten davon, dem Textknoten. Den wiederum können wir ändern. Wie das in der Praxis aussieht, könnt Ihr ausprobieren (allerdings, wie gesagt, nur in Browsern, die das DOM verstehen):

Klick mich!

Die Attribute eines HTML-Elements könnt Ihr sogar noch einfacher bekommen: Sie sind Eigenschaften des Elements

// Ändern des src-Attributs eines img-Tags
document.getElementById('bild').src = "neues_bild.jpg";
// Ändern des href-Attributs eines a-Tags
document.getElementById('link').href = "http://www.splashcomics.de";

Ein Attribut ist nicht nur eine Eigenschaft des Elements, sondern ein eigenes Unterobjekt: Das style-Attribut. Darüber könnt Ihr auch CSS-Attribute setzen

// Ändere die Textfarbe auf rot
document.getElementById('text').style.color = "red";
// Ändere die Hintergrundfarbe
document.getElementById('text').style.backgroundColor = "darkblue"; 

Dabei müßt Ihr nur auf eines achten, was auch schon im obigen Beispiel zu sehen ist: Enthält der Name der CSS-Eigenschaft einen Bindestrich, müßt Ihr den Namen etwas umschreiben. Aus 'background-color' wird 'backgroundColor', aus 'border-style' wird 'borderStyle', und so weiter.

Damit habt Ihr bereits alles für einen Rollover-Effekt beisammen

<script type="text/javascript">
<!--
  function enlight(id)
    {
    // erzeuge den Dateinamen des "leuchtenden" Bildes
    var filename = id + "-enlighted.jpg";
    // ändere src-Attribut
    document.getElementById(id).src = filename;
    }
   function delight(id)
    {
    // erzeuge den Dateinamen des "normalen" Bildes
    var filename = id + "-normal.jpg";
    // ändere src-Attribut
    document.getElementById(id).src = filename;
    }
//-->

</script>
...
<img src="01-normal.jpg" onMouseOver="enlight('01')"
  onMouseOut="delight('01')">
<img src="02-normal.jpg" onMouseOver="enlight('02')"

  onMouseOut="delight('02')">
<img src="03-normal.jpg" onMouseOver="enlight('03')"
  onMouseOut="delight('03')">

Für die Elemente eines Formulars gibt es noch eine andere Zugriffsmöglichkeit, und zwar über die name-Attribute. Wie das geht, zeigt dieses Beispiel

<form name="das_formular">
  <input type="text" name="erster">
  <input type="text" name="zweiter">

</form>

Dann könnt Ihr beispielsweise einfach den Inhalt des einen Textfeldes in das andere kopieren

document.das_formular.zweiter.value =
  document.das_formular.erster.value;

Das form-Element kennt außerdem zwei sehr praktische Methoden: submit() und reset(). Diese beiden Funktionen haben die gleiche Wirkung wie ein Submit- bzw. ein Reset-Button im Formular. Damit könnt Ihr zum einen die vorgegebenen Buttons durch eigene Links ersetzen

<a href="javascript:das_formular.submit()"><img src="submit.jpg"></a>

zum anderen könnt Ihr vor dem Abschicken die Eingaben prüfen

<a href="javascript:pruefen()"><img src="submit.jpg"></a>

...
// die JavaScript-Funktion
function pruefen()
  {
  var ok = 0; // Variable zum "Merken" von Fehlern
  var form = document.das_formular; // das Formular

  if (form.name.value == "") // ist im Feld 'name' etwas eingetragen
    ok = 1;
  // enthält die E-Mail-Adresse ein '@'
  if (form.email.value.indexOf('@') == -1)
    ok = 1;

  if (ok == 0) // kein Fehler
    form.submit(); // Daten wegschicken
  else
    window.alert("Eingaben unvollständig");
  }


Special vom: 16.01.2003
Autor dieses Specials: Henning Kockerbeck
Die weiteren Unterseiten dieses Specials:
Die reine Lehre - HTML
Stilvoll - CSS
Kleiner Grundkurs Programmieren
Jetzt wird's dynamisch - JavaScript
Die andere Seite der Dynamik - PHP
Neue Gefilde - XML
Weiterführende Links
Zurück zur Hauptseite des Specials


?>