DE | EN

Mit JavaScript Webseiten auf Basis von HTML verändern

In dieser Lektion lernen Sie, wie eine Webseite durch JavaScript-Code verändert werden kann. Zielsetzung ist es dabei, dass Ergebnisse von Berechnungen von JavaScript-Code direkt auf einer Webseite dargestellt werden können (siehe Abbildung 1). Darüber hinaus sind aber über die Mechanismen, die Sie hier kennenlernen werden, auch weitere Dinge möglich:

Text output on web page

Ändern von HTML-Elementen mittels des Document Object Model (DOM)

Mit HTML werden Webseiten grundsätzlich in einer hierarchischen Struktur beschrieben. Man kann diese Struktur auch als eine Baumstruktur darstellen.

HTML

    <html>
        <head>
            <meta charset="UTF-8">
            <title>...</title>
        </head>
        <body>
            <h1>...</h1>
            <p>...</p>
        </body>
    </html>
                
HTML page graph

Jedes Element einer HTML-Seite wird dabei durch einen Knoten im Baum repräsentiert. Knoten weisen dabei immer einen Inhalt und Attribute auf. Letztere steuern insbeonsdere die Darstellung des Elements.

Von JavaScript aus kann auf diesen Baum direkt zugegriffen werden. Es können dabei Knoteninhalte asugelesen und verändert werden. Zudem können auch Knoten hinzugefügt oder gelöscht werden. Für diesen Zweck wird vom jeweiligen Browser bei Darstellung einer HTML-Seite ein Objekt bereitgestellt, das document-Objekt, welches das aktuelle HTML-Dokument in Form einer Baumstruktur repräsentiert. Eine detaillierte Beschreibung dieses document-Objekts ist hier zu finden.

Eine wesentliche Funktionalität, die über das document-Objekt verfügbar ist, ist die Suche und der Zugriff auf bestimmte Knoten im Baum. Eine häufig verwendete Vorgehensweise ist die Vergabe einer eindeutigen ID an einen Knoten, den man manipulieren möchte, im HTML-Code, und der Zugriff auf diesen Knoten über das document-Objekt mittels der vergebenen ID. Das folgende Beispiel illustriert diese Vorgehensweise. Dabei wird im zugehörigen HTML-Code einem <p>-Knoten die eindeutige ID output zugewiesen.

HTML

                        <html>
                            <head>
                                <meta charset="UTF-8">
                                <title>Dynamic HTML Elements with JavaScript</title>
                                <script src="scripts/ex-p-changer.js">
                                </script>
                            </head>
                            <body>
                                <h1>Dynamic HTML Elements with JavaScript</h1>
                                <p>The static part of the HTML page contains just a single paragraph content.
                                </p>
                                <p ID="output">
                                </p>
                            </body>
                        </html>
                    

Die dazugehörige JavaScript-Datei sieht wie folgt aus:

JavaScript

                     var element = document.getElementById('output');
                     element.innerHTML =
			            "This paragraph was added by JavaScript.";
                

Berechnungen per Knopfdruck initiieren

Ein wichtiges Element auf dem Weg zu vollständig interaktiven Formularen und Berechnungen innerhalb von Webseiten stellt das Feststellen und die Verarbeitung von Nutzereingaben sowie anderer Nutzeraktivitäten dar. Hierzu gehören etwa:

In JavaScript werden solche Ereignisse als Eventsbeteichnet. JavaScript stellt intern Mechanismen zum Erkennen solchen Events bereit und bietet zudem Möglichkeiten zu deren Behandlung (Event Handling)an. Eine vollständige Liste der Events, die erkannt und behandelt werden können, finden Sie etwa auf der selfhtml-Seite oder auch auf den Seiten von Mozilla.

Eine ausführliche Eimführung in das Event Handling können Sie auf den Seiten von selfhtml finden:

Grundlage für die Benachrichtigung über Events und deren Behandlung stellt die Bereitstellung einer JavaScript-Funktion dar, die registriert werden muss und die dan im Fall des Eintreffens des jeweiligen Events vom System aufgerufen wird. In dieser Funktion können dann spezifische Schritte festgeletgt werden, die aufgrund des Ereignisses zur Anwendung kommen sollen.

Das folgende Beispiel illustriert die Definition eines Event Handlers und dessen Registrierung. In dem Beispiel wird ein spezielles HTML-Element für Interaktionen eingesetzt, ein Button. Für diesen Button wird dann ein Event-Handler registriert, der im Fall eines Klicks auf diesen aufgerufen werden soll.

HTML

                <!DOCTYPE html>
                <html>
                    <head>
                        <meta charset="UTF-8">
                        <title>Button with JavaScript</title>
                        <script src="scripts/example-button.js"></script>
                    </head>
                    <body>
                        <h1>Dynamic HTML contents with JavaScript</h1>
                        <p>Press the button to add dynamic content from the linked JavaScriot script: </p>
                        <button type="button" id="button1" onclick="handleButtonClickAndAddContent();">Go!</button>
                        <p id="output"></p>
                    </body>
                </html>
            

Zu dieser HTML-Datei gehört dann eine gesonderte JavaScript-Datei, in diesem Fall mit dem Namen "example-button.js" im Unterordner "scripts":

JavaScript

                function handleButtonClickAndAddContent() {
                    var element = document.getElementById('output');
                    element.innerHTML =
				        "This paragraph was added by the handleButtonClickAndAddContent-function!";
                }
            

Formulare und Eingabefelder nutzen

HTML stellt neben Buttons weitere spezielle Elemente für Nutzereingaben zur Verfügung. Diese sind inner halb von Formularen (umgesetzt mit dem form-Element) mit dem HTML-Element input verfügbar. Formulare diesen dabei die Zusammenfassung mehrerer Eingabeelemente, deren Werte nach dem Ausfüllen und Absenden des Formulatrs dann weiter verarbeitetet werden. Einzelne Input-Eingabelemente können dabei über eine Parametrisierung bzgl. der Eingabeform angepasst werden. So können beispielsweise Texteingabefelder, Buttons, Slider und Checkboxen umgesetzt werden. Eine vollständigere Darstellung ist aufg den Seiten von selfhtml zu finden.

Das folgende Beispiel zeigt die Umsetzunng eines Formulars mit zugehörigem Skript zur Verarbeitung der eingegebenen Werte. Das Skript muss in diesem Fall das Eingabeelement oder die Eingabeelemente des Formulars identifizieren und deren Werte extrahieren. Diese geschieht mit dem .value-Accessor. Entsprechend extrahierte Werte können dann weiter verarbeitet werden.

HTML

                <!DOCTYPE html>
                <html>
                    <head>
                        <meta charset="UTF-8">
                        <title>Using Forms with JavaScript</title>
                        <script src="scripts/example-simple-form.js"></script>
                    </head>
                    <body>
                        <h1>A Simple Form with JavaScript</h1>
                        <form>
                            <ol><li>
                                <label for="firstname">>Please enter your firstname:</label>
                                <input id="firstname" name="firstname>>
                            </liol></ol>
                        </form>
                        
                        <p id="output"></p>
                    </body>
                </html>
            

Die JavaScript-Datei sieht hierbei wie folgt aus:

JavaScript

                function handleForm() {
                    var inputElement = document.getElementById("firstname");
                    var outputElement = document.getElementById("output");
                    outputElement.innerHTML = "Hello " + inputElement.value + "!";
                }
            

EventHandler mit Parametern nutzen

Die vorherigen Beispiele zeigen die Registrierung eines Event Handlers und das Zusammenspiel dieser Funktion mit dem HTML-Code. In diesen konkreten Fällen ist die Event-Handler-Funktion speziell auf die Aufgabe der Ausgabe Veränderung eines bestimmten HTML-Paragraphen mit Bezeichnung output zugeschnittem. Würden weitere interaktive Elemente in die Seite eingebaut, müsste bei dieser Vorgehensweise für jedes dieser Elemente und für jede Ereignisbehandlung ein weitere spezifische Event-Handler-Funktion geschrieben werden. Es gibt jedoch Situationen, in der sich die Vorgehensweisen bei der Ereignisbehandlung sehr ähneln. Beispiele hierfür sind:

Um die Viederverwendung von Event-Handler-Funktionen zu ermöglichen ist es aus Sicht der Funktion grundsätzlich erst einmal wichtig zu erfahren, von welchem HTML-Element das jeweilige Ereignis ausgelöst wurde. Unter anderem hierzu ist es möglich, die Event-Handler-Funktion um einen Parameter zu ergänzen. Diesen hatten wir bislang bei unseren Beispielen ignoriert. Vom System wird ein solcher Parameter, der weitere Kontextinformtionen zum ausgelösten Ereignis enthält, mit übergeben, wenn dies bei der Registrierung mittels onclick entsprechend angegeben wird. Dieser kann insbesondere dazu genutzt werden, um das HTML-Element, das das Ereignis ausgelöst hat, zu identifizieren. Dies wird im folgenden Beispiel genutzt, um auf Events von 2 Buttons mit einem einzigen Event-Handler adequat reagieren zu können.

HTML

                <!DOCTYPE html>
                <html>
                    <head>
                        <meta charset="UTF-8">
                        <title>Button with JavaScript</title>
                        <script src="scripts/example-2-button.js"></script>
                    </head>
                    <body>
                        <h1>Dynamic HTML contents with JavaScript</h1>
                        <p>Press the button to add dynamic content from the linked JavaScript script: </p>
                        <button type="button" id="button1" onclick="handleButtonClickAndAddContent(event);">Button 1</button>
                        <button type="button" id="button2" onclick="handleButtonClickAndAddContent(event);">Button 2</button>
                        <p id="output"></p>
                    </body>
                </html>
            

Zu dieser HTML-Datei gehört dann eine gesonderte JavaScript-Datei, in diesem Fall mit dem Namen "example-button.js" im Unterordner "scripts":

JavaScript

                function handleButtonClickAndAddContent(event) {
                    var element = document.getElementById('output');
                    element.innerHTML =
				        "The following button was pressed: " + event.currentTarget.textContent;
                }
            

Übungsaufgaben zu JavaScript und DOM

Aufgabe 1: Mehrwertsteuerberechnung

  1. Überarbeiten Sie Ihre interaktive Webseite zur Mehrwertsteuerberechnung dahingehend, dass Aus- und Eingaben direkt auf der Webseite und ohne Umweg über die deren Hilfe die prompt() und alert()-Funktion erfolgen können.
  2. Stellen Sie die Ausgabe so um, dass diese in einem dafür vorgesehenen HTML-Element erfolgen kann. Entwickeln Sie dazu zunächst ein Konzept, wie die HTML-Seite strukturiert sein soll und welches HTML-Element für die Ausgaben von JavaScript reserviert werden soll.
  3. Stellen Sie die Eingabe so um, dass diese über ein Eingabefeld auf der HTML-Sekte erfolgt und die Berechnung über den Klick auf einen Button aktiviert wird.
  4. Erweitern Sie Ihre Anwendung um eine Eingabeüberprüfung, bei der überprüft wird, ob es sich bei dem eingegebenen Wert um einen korrekt eingegebenen Zahlenwert handelt. Im Falle einer fehlerhaften Eingabe soll ein entsprechendes Feedback gegeben werden, einerseits durch eine Hinterlegung des fehlerhaften Werts in roter Farbe, andererseits durch eine dedizierte Fehlermeldung.

Aufgabe 2: Generierung einer Visitenkartenansicht

  1. Entwickeln Sie ein Formular zur Eingabe von persönlichen Daten. Geben Sie diese Daten nach Absenden des Formulars in einem eigenen Abschnitt der Webseite als Visitenkarte aus. Nutzen Sie dazu geeignete Gestaltungselemente.
  2. Ergänzen Sie die Anwendung um geeignete Methoden der Eingabekontrolle, die im Fall von unvollständigen oder fehlerhaften Eingaben im Formular entsprechende Fehlermeldungen ausgeben.
  3. Erweitern Sie Ihre Anwendung insoweit, dass mehrere Visitenkarten untereinander ausgegeben werden. Die Anzahl der Visitenkarten soll dabei im Eingabeformular mit spezifiziert werden.
  4. Erweitern Sie Ihre Anwendung dahingehend, dass die Visitenkarten in mehreren Zeilen und Spalten ausgegeben werden.



zur Lösung

nächstes Übungsblatt