DOM

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Wissen Können Projekt
  • Baumstruktur des DOMs repräsentiert eine Webseite
  • DOM-Manipulationen bewirken Änderung der Webseite
  • jQuery als Hilfsframework
  • Events bieten Einstiegspunkte für Reaktionen
  • Konzept von Subscriptions und Callbacks (Funktionen höherer Ordnung)
  • Zugriff und Manipulation des DOM mit Javascript
  • Arbeiten mit jQuery (Zugriff, Manipulation, Ereignisse)
  • Zusammenführung von Sudoku Spielfeld und Dokumentation (Umschaltung per DOM-Manipulation)
  • Angeklicktes Sudoku-Feld wird hervorgehoben
  • In Sudoku-Felder dürfen nur die Werte 1-9 eingetragen werden
  • Start-Knopf: Alle Sudoku-Felder werden mit zufälligen Zahlen gefüllt

Das Domain-Object-Model (DOM) ist eine im Arbeitsspeicher befindliche Struktur, die den momentanen Zustand einer Webseite repräsentiert. Es handelt sich dabei um eine hierarchische Struktur, die dem Inhalt des body der Seite ähnelt. Im Falle statischer Webseiten gleichen die Strukturen einander (bis auf kleine Korrekturen die der Browser einfügt). Der Browser rendert den DOM unter Zuhilfenahme der CSS Definitionen um daraus sichtbaren Inhalt zu generieren. Daraus kann abgeleitet werden, dass durch Veränderung des DOM eine Änderung des angezeigten Inhalts bewirkt wird. Single-Page-Applications (SPA) nutzen ausschließlich diese Möglichkeit der DOM-Manipulation um dynamischen Seitenhalt zu produzieren. Die Browser-Umgebung stellt dazu das document Objekt bereit, welches den Einstiegspunkt in den DOM darstellt. Die Manipulationen werden mit Javascript realisiert.

Javascript benutzen

Neben HTML zur Strukturierung und CSS zur Formatierung bildet Javascript die dritte Säule von HTML5. Jegliche dynamische Änderung der Struktur des DOM wird mit Javascript bewerkstelligt. Auch Änderungen der Formatierungen sind entweder direkt, durch Manipulation der style Attribute, oder indirekt, durch Änderung der class von DOM-Elementen möglich. Um Javascript zu verwenden, muss in die HTML-Seite zumindest ein script Bereich integriert werden. Dieser kann direkt in der HTML-Datei mit Javascript Code gefüllt werden oder mittels src Attribut nur refernziert werden. In letzerem Fall wird der gesamte Inhalt der Datei als script Bereich interpretiert.

  • Übernehmen Sie das Beispiel und erzeugen Sie neben der HTML Datei die extern.js Datei mit dem Inhalt alert("Hallo Extern!");
  • Verschieben Sie die Datei extern.js in einen Unterordner und passen Sie den Code entsprechend an
  • Tauschen Sie die beiden script Tags und machen Sie sich die zeitlichen Abläufe beim Laden der Skripte klar
  • Recherchieren Sie die Funktion console.log und ersetzen Sie alert entsprechend

DOM Manipulation

Innerhalb eines jeden script Bereichs wird das document Objekt bereitgestellt. Dieses bietet diverse Funktionen um Elemente im DOM zu finden und Manipulationen vorzunehmen. Damit wird ermöglicht, dass auch HTML Definitionen mit leerem body dynamisch zu komplexen Webseiten umgewandelt werden.

  • Ergänzen Sie eine weitere Spalte und weitere Zeilen
  • Finden Sie alle td Elemente im DOM und gruppieren Sie diese in der Klasse field (Attribut class)
  • Finden Sie Elemente der Klasse field und erweitern Sie deren Inhalt um eine laufende Nummer
  • Recherchieren Sie die Funktion querySelectorAll und finden Sie so alle Tabellenfelder der zweiten Spalte
  • Geben Sie den gefundenen Feldern einen grünen Rahmen

jQuery

Mit jQuery wird ein Framework bereitgestellt, der die Programmierung von DOM-Manipulationen erleichtert. Es handelt sich hierbei um einen Aufsatz, der in seinem Kern ebenso die Manipulationsfunktionen des document Objekts benutzt, aber eine kürzere und zumeist verständlichere Programmierung erlaubt. Zur Einbindung von jQuery reicht es aus, wie auch bei jeder anderen Javascript Bibliothek, diese als externes script einzubinden. Die Online-Einbindung über ein Content-Delivery-Network (CDN), z.B. https://code.jquery.com/, ist ebenso möglich wie die lokale Einbindung der heruntergeladenen Javascript-Datei. In jedem Fall ist bei Einbindung mehrerer Bibliotheken auf die Reihenfolge der Einbindung zu achten.

Durch jQuery wird ein $ Objekt bereitgestellt, welches den Einstieg in jegliche jQuery-Funktionalität darstellt. Bei Benutzung dieses Objekts als Funktion und Übergabe einer entsprechenden Zeichenkette wird ein Ergebnisobjekt geliefert, dass "ein Stück DOM" repräsentiert. Bei Angabe von Selektoren werden die entsprechenden DOM-Elemente im Ergebnis geliefert. Jeglicher anderer Text wird in ein der DOM-Struktur-Syntax entsprechendes Element umgewandelt, welches aber zum Zeitpunkt der Erstellung noch kein Teil des DOM ist. Diese durch jQuery gelieferten DOM-Elemente stellen nun diverse Funktionen bereit um Manipulation vorzunehmen.

  • Analysieren Sie das Beispiel und erklären Sie die Gemeinsamkeiten zum vorherigen Beispiel (Hinweis: Achten Sie auf die Klammerung)
  • Erweitern Sie die Tabelle um weitere Spalten und Zeilen und gruppieren Sie die td Elemente in Klassen (Hinweis: addClass)
  • Recherchieren Sie die Funktionen prepend(), after() und before(). Überlegen Sie wie Sie diese Funktionen ohne jQuery umsetzen würden.
    (Hinweis: Viele Browser unterstützen bereits nativ diese Funktionen. Lösen Sie die Aufgabe ohne diese Funktionen zu benutzen.)
  • Erweitern Sie den Inhalt aller Felder um eine laufende Nummer und recherchieren Sie den Unterschied zwischen den Funktionen text(), html() und val()
  • Legen Sie für die Tabellenfelder der zweiten Spalte einen grünen Rahmen fest
  • Leeren Sie den Inhalt aller Tabellenfelder, die keinen grünen Rahmen haben

Events und Callbacks

Javascript Code, der unmittelbar im script Bereich implementiert ist, wird immer beim Laden des Skripts ausgeführt. Zu diesem Zeitpunkt ist u.U. das DOM noch nicht komplett aufgebaut und ein Selektor liefert damit womöglich noch kein Ergebnis. Um diesem Problem entgegen treten zu können, werden vom Browser Ereignisse ausgelöst. Auf diese Events kann reagiert werden indem eine Funktion definiert wird, die bei Auslösung des Events ausgeführt wird.

Neben dem document (für den Zugriff auf das DOM) steht im script Bereich immer ein window Objekt zur Verfügung. Dieses kapselt das Browser-Objekt-Model (BOM) und repräsentiert das aktuelle Fenster im Browser. Beide Elemente bieten u.a. Einstiegspunkte für die Event-Subscription, also die Registrierung zur Benachrichtung bei bestimmten Ereignissen. Eine solche Benachrichtigung erfolgt durch Aufruf einer bestimmten Funktion, wenn diese definiert ist. Wird die window.onload Funktion definiert (z.B. window.onload = function() { alert("onload"); };), so wird diese durch den Browser aufgerufen wenn die Seite fertig geladen und bereit zur Anzeige ist. Durch Platzierung sämtlicher Initialisierungen innerhalb einer solchen Funktion wird sichergestellt, das alle Elemente des DOM geladen wurden. (In den JSFiddle Beispielen ist dieser Ausführungszeitpunkt fest eingestellt)

Eine syntaktisch andere Form der Subscription wird durch die Funktion addEventListener bereitgestellt. Neben dem Namen des Events muss hier eine Funktion als Parameter übergeben werden. Diese Callback-Funktion wird dann bei Auslösung des Ereignisses ausgeführt. Die Funktion addEventListener steht an jedem DOM-Element zur Verfügung und dient somit nicht nur zur Registrierung globaler Ereignisse, sondern auch zur Reaktion auf Ereignisse an ganz bestimmten DOM-Elementen. Das jQuery Objekt bietet mit der Funktion on eine ähnliche Funktionalität. Zusätzlich gibt es auch verkürzte Varianten wie click oder mouseover bei denen der Ereignistyp vorbestimmt ist.

  • Fügen Sie einen Button hinzu, der bei Klick den vorhandenen Test-Button ausblendet
  • Bei einem weiteren Klick soll der Test-Button wieder eingeblendet werden
  • Verlangsamen Sie den Ein-/Ausblendeffekt und deaktivieren Sie während des Effekts Ihren Button
  • Geben Sie dem Button einen grünen Rand solange sich die Maus darüber befindet
  • Ändern Sie beim Überfahren zusätzlich den Text des Buttons und recherchieren Sie, wie Method Chaining Ihnen dabei helfen kann

Projekt und weitere Übungen

Führen Sie die Dokumentation und das Spielfeld in einer HTML Datei zusammen und regeln Sie die Seitenumschaltung nun durch Manipulation des DOM. Wird in ein Sudoku-Feld geklickt, so soll es hervorgehoben werden, wobei natürlich immer nur ein Feld hervorgehoben sein soll. Entwerfen Sie außerdem eine geeignete Eingabevalidierung für die Sudoku-Felder. Fügen Sie dem Spielfeld einen Start-Button hinzu und füllen Sie bei Klick das Spielfeld mit zufälligen Zahlen komplett aus.

Beispiellösung
WE1-P5.zip (0.1 MB)
  1. Installieren Sie (lokal) auf Ihrem Laptop das Firefox-AddOn "DOM Inspector". Analysieren Sie die DOM-Struktur eines einfachen HTML-Dokuments. Verwenden Sie auch Elemente mit Attributen.
  2. Verwenden Sie Firefox und öffnen Sie die Entwicklerwerkzeuge. Suchen Sie sich im Inspektor (nicht DOM Inspector) ein DOM-Element mit einer ID aus, die Sie sich merken. Wechseln Sie zur Konsole und geben Sie ein: document.getElementById("IhreGemerkteID") . Führen Sie in dieser Browser-Umgebung ganz ähnliche Navitations- und Modifkationsexperimente durch wie Sie das im Tutorial gemacht haben.
  3. DOM-Manipulationen werden in Echtzeit ausgeführt. Entwerfen Sie ein HTML-Dokument nach eigenen Intentionen, das per Knopfdruck schnelle Farbwechsel an verschiedenen Stellen des Dokuments, verschwindenden bzw. erscheinenden Text und weitere spektakuläre Effekte offeriert. Verwenden Sie HTML(5), CSS und jQuery.
  4. Ersetzen Sie die Knöpfe zum Auslösen der Effekte aus der vorherigen Aufgabe durch Events. Stellen Sie sich jeweils passende Anwendungsfälle vor.
  5. Machen Sie sich mit den in der Vorlesung aufgezeigten Technologien der Eingabeverifizierung vertraut, indem Sie mit den entwickelten Dokumenten experimentierten und diese modifizieren, um die sich daraus ergebenden Effekte zu beobachten. Den Einsatz von JavaScript sollten Sie dabei auf ein Minimum beschränken, da noch nicht bekannt.
Persönliche Werkzeuge