Cover

Inhalt

Titelei

Impressum

Inhalt

Vorwort

1 Einleitung

1.1 Das Umfeld

1.2 Frameworks und Toolkits

1.3 Was behandeln wir in diesem Buch?

1.3.1 Das Kern-Framework jQuery

1.3.2 Plugins, UI, Mobile & Co

1.3.3 Wen sehe ich als Zielgruppe für das Buch?

1.4 Schreibkonventionen

1.4.1 Listings

1.5 Was benötigen Sie beziehungsweise was nutzt Ihnen?

1.5.1 Hardware und Betriebssystem

1.5.2 jQuery, jQuery Mobile, jQuery UI & mehr

1.6 Die Browser

1.6.1 Verschiedene Betriebssysteme und virtuelle Maschinen zum Testen

1.7 Die Entwicklungsumgebungen und nützliche Helferlein

1.7.1 Editoren – oft bereits mit gewisser Hilfestellung

1.7.2 Integrierte Entwicklungsumgebungen

1.7.3 Kleine Helferlein

1.7.4 Node.js und Git

1.7.5 Integrierte Entwicklungstools in Browser und Browser-Add-ons

1.7.6 Der Webserver zum realistischen Testen

1.8 Zusammenfassung

2 Sprung ins kalte Wasser

2.1 Zugriff auf Elemente und Schutz des DOM

2.2 Veränderung der Webseite mit DHTML

2.3 Animiertes Verkleinern und Vergrößern eines Elements

2.4 Attribute dynamisch verändern

2.5 Zusammenfassung

3 Grundlagenwissen

3.1 Das WWW, das Web 2.0 und das Client-Server-Prinzip im Internet

3.1.1 Programmierung im WWW

3.1.2 Das Web 2.0 und Ajax

3.2 JavaScript und das Verhältnis zu jQuery

3.2.1 Die allgemeine Einbindung von JavaScript in Webseiten

3.2.2 JSON

3.3 DOM und Objekte

3.3.1 DOM und der Zugriff auf Elemente einer Webseite

3.4 Style Sheets und DHTML

3.4.1 CSS – die Standardsprache des Webs

3.4.2 Die konkrete Syntax von CSS-Deklarationen

3.4.3 Selektoren

3.5 Zusammenfassung

4 Wie jQuery grundsätzlich arbeitet

4.1 Grundsätzliches zum Zugriff auf Elemente der Webseite

4.1.1 Ein Beispiel für unterschiedliche Knoten

4.2 Der jQuery-Namensraum und das jQuery-Objekt

4.3 Spezielle Datentypen und Strukturen in Query

4.3.1 Methoden

4.3.2 Optionen

4.3.3 jqXHR

4.4 Die Funktion jQuery() und der Alias $()

4.4.1 Der Kontext

4.4.2 Verketten von Methoden und die jQuery-Warteschlange

4.4.3 Funktionsaufrufe nacheinander ausführen – die jQuery-Warteschlange

4.4.4 jQuery.then() und jQuery.when()

4.5 Funktionen nach Aufbau des DOM ausführen

4.5.1 Callback oder anonyme Funktion als Parameter für jQuery()

4.5.2 Das ready-Event

4.5.3 document.ready() in eine externe JavaScript-Datei auslagern

4.5.4 Mit jQuery.holdReady() das ready-Event beeinflussen

4.6 Ein Element mit jQuery() erstellen und in die Webseite einfügen

4.6.1 Ein trickreiches kleines Problem – können Sie es lösen?

4.6.2 Optionen zum Initialisieren von Attributen

4.7 Direkter Zugriff auf DOM-Elemente mit get( )

4.8 Gemeinsame Verwendung von jQuery und anderen Frameworks

4.8.1 Die Funktion jQuery.noConflict()

4.8.2 Einen alternativen Alias verwenden

4.9 Datenspeicherung im DOM

4.10 Mehr zum Kontext und jQuery-Utilities

4.11 Zusammenfassung

5 Umgang mit Selektoren und Filtern

5.1 Klassische DOM-Zugriffsmethoden

5.1.1 Objektfelder

5.1.2 Zugriff über einen Namen

5.1.3 Verwandtschaftsbeziehungen

5.1.4 Elementnamen, IDs und Klassennamen

5.1.5 DOM-Zugriffsmöglichkeiten versus jQuery

5.2 Was versteht man unter Selektoren?

5.2.1 Was ist ein Selektor?

5.2.2 Was sind Filter?

5.2.3 CSS3, SQL und XPath als Grundlagen und Hintergrund

5.3 Basisselektoren und hierarchische Selektoren

5.3.1 Beispiele zur Verdeutlichung

5.3.2 Potenzielle Fallen

5.4 Filterausdrücke

5.4.1 Basisfilter

5.4.2 Inhaltsfilter

5.4.3 Sichtbarkeitsfilter

5.4.4 Kindfilter

5.4.5 Attributfilter

5.4.6 Filter für Formularelemente und Formularfilter

5.4.7 Formularfilter zur Auswahl aufgrund des Zustands

5.5 Filtermethoden

5.5.1 Praktische Beispiele von Filtermethoden

5.6 Zusammenfassung

6 Zugriff auf die Elemente einer Webseite

6.1 Inhalte von Knoten abfragen und verändern – html() und text()

6.1.1 Ein Beispiel zu html() und text()

6.2 Inhalt von Formularfeldern – val()

6.2.1 Ein Beispiel für den Zugriff auf Formularfelder

6.3 Zugriff auf Attribute und Eigenschaften mit attr() und prop()

6.3.1 Zugriff auf Attribute

6.3.2 Zugriff auf Eigenschaften

6.3.3 Unterschied zwischen Attributen und Eigenschaften

6.3.4 Das Beispiel zum Zugriff auf Eigenschaften und Attribute

6.4 Einfügen von Knoten in eine Webseite

6.4.1 append() und prepend()

6.4.2 appendTo() und prependTo()

6.5 Knoten nachher oder vorher einfügen

6.5.1 after() und before()

6.5.2 insertAfter() und insertBefore()

6.6 Ummanteln

6.6.1 Einzeln mit wrap() ummanteln

6.6.2 Alles ummanteln mit wrapAll()

6.6.3 Innere Bereiche ummanteln mit wrapInner()

6.6.4 Den Mantel ablegen – unwrap()

6.7 Ersetzen mit replaceWith() und replaceAll()

6.7.1 Ersetzen mit replaceWith()

6.7.2 Alles ersetzen mit replaceAll()

6.8 Überflüssige Knoten entfernen

6.8.1 Die Methoden empty() und remove()

6.8.2 Die Alternative zu remove() – detach()

6.8.3 Löschen von Attributen

6.9 Vervielfachen mit clone()

6.10 Suchen & Finden

6.10.1 Von Kindern und Eltern

6.10.2 Von Geschwistern

6.10.3 Nachfolger mit has() suchen

6.11 Finden mit find() und contents()

6.12 Mit each() und map() über Arrays und Objekte iterieren

6.12.1 jQuery.each() und jQuery.map()

6.12.2 Die Methoden each() und map()

6.13 Die Methode add()

6.14 Die Methoden end() und andSelf()

6.15 Zusammenfassung

7 Layout und Formatieren mit Style Sheets unter jQuery

7.1 Hintergrundinformationen

7.1.1 CSS in jQuery – Vermischung von Layout und Funktionalität?

7.2 Die Methode css()

7.2.1 Abfragen von Stileigenschaften

7.2.2 Setzen von Eigenschaften

7.3 Klassen von Elementen verändern

7.3.1 Klassen hinzufügen – addClass()

7.3.2 Klassen wegnehmen – removeClass()

7.3.3 Klassen umschalten mit toggleClass()

7.3.4 Test auf eine Klasse – hasClass()

7.4 Methoden zur Positionierung

7.4.1 Bestimmen der Position mit position()

7.4.2 Position relativ zum Dokument – offset()

7.4.3 Methoden zum Scrollen

7.5 Höhe und Breite

7.5.1 height() und width()

7.6 Innere und äußere Maße

7.7 jQuery.cssHooks

7.8 Zusammenfassung

8 Ein Praxisbeispiel – eine Datumskomponente

8.1 Das Ziel

8.1.1 Die Basiswebseite

8.2 Die CSS-Datei – Templates

8.3 Die JavaScript-Datei

8.4 Zusammenfassung

9 Ereignisbehandlung unter jQuery

9.1 Grundlagen zu Ereignissen, Eventhandlern, Triggern und Datenbindung

9.1.1 Ereignisse

9.1.2 Allgemeines zu Eventhandlern

9.1.3 HTML-Eventhandler

9.1.4 JavaScript/DOM-Eventhandler

9.1.5 Das Ereignisobjekt

9.1.6 Blubbern und die Bubble-Phase

9.1.7 Datenbindung

9.1.8 Trigger

9.1.9 Delegation

9.1.10 Versprechen (Promises)

9.2 Das Ereignisobjekt in jQuery

9.2.1 Der Konstruktor von jQuery.Event

9.2.2 Die Eigenschaften des Ereignisobjekts jQuery.Event

9.2.3 Die Methoden eines Objekts vom Typ jQuery.Event

9.2.4 Die Ausführung des bereitstehenden Ereignisses anhalten

9.3 Ich habe fertig – $(document).ready()

9.4 Event-Helper

9.5 Erweiterte Methoden für das Eventhandling

9.5.1 Datenbindung

9.5.2 Triggern

9.6 Live Events

9.6.1 Die veraltete Methode live()

9.6.2 Die veraltete Methode delegate() und die delegate-Variante von on()

9.6.3 Die Methoden die() und undelegate()

9.7 jQuery.proxy()

9.8 Weiterentwicklung der Datumskomponente

9.9 Zusammenfassung

10 Effekte und Animationen

10.1 Grundsätzliche Anwendung

10.1.1 Speed is all you need

10.1.2 Die Angabe eines Callback

10.1.3 Verkettung

10.1.4 Warteschlangen

10.1.5 Beendigung mit stop(), finish() und jQuery.fx.off

10.1.6 Endlosanimationen

10.1.7 Art der Animationen – Easing

10.2 Konkrete Effekte mit Standardmethoden

10.2.1 Anzeigen und Wegblenden – die Methoden show() und hide()

10.2.2 Gleiteffekte – slideDown(), slideUp() und slideToggle()

10.2.3 Transparenzeffekte – fadeIn(), fadeOut() und fadeTo() sowie toggle()

10.3 Individuelle Animationen mit animate()

10.4 Zusammenfassung

11 Asynchrone Programmierung

11.1 Ajax und XMLHttpRequest (XHR) – Grundlagen

11.1.1 Ein XMLHttpRequest-Objekt manuell erzeugen

11.1.2 Die Methoden eines XHR-Objekts

11.1.3 Die Eigenschaften eines XHR-Objekts

11.1.4 Das Datenformat bei einer Ajax-Kommunikation

11.1.5 Exemplarischer Ablauf einer Ajax-Anfrage

11.2 Spezialitäten bei der Ajax-Unterstützung in jQuery

11.2.1 JSONP und Remote Requests

11.2.2 Das jqXHR-Objekt

11.2.3 Grundsätzliches zu Methoden in jQuery für Ajax-Anfragen

11.2.4 Vermeidung von Caching

11.3 Anwendung der Standardmethoden für Ajax

11.3.1 $.get() und $.post()

11.3.2 JSON-Daten anfordern und verarbeiten – getJSON() und parseJSON()

11.4 Ein Skript per Ajax nachladen – jQuery.getScript()

11.5 Die allgemeine Variante zum Laden von Daten – load()

11.5.1 Filter angeben

11.6 Serialisieren von Daten

11.6.1 Die Methode serialize()

11.6.2 Die Methode serializeArray()

11.6.3 Die allgemeine Version zum Serialisieren – $.param()

11.7 Vorgabewerte für Ajax – jQuery.ajaxSetup()

11.8 Ajax Events und Ajax-Eventhandler

11.8.1 Lokale Ereignisse

11.8.2 Globale Ereignisse

11.9 Die vollständige Kontrolle

11.9.1 jQuery.ajax()

11.9.2 Erweiterte Techniken für $.ajax()

11.10 Web Worker

11.10.1 Was ist ein Web Worker?

11.10.2 Erzeugen von Web Workern

11.10.3 Die Kommunikation mit einem Web Worker

11.10.4 Einen Worker mit terminate() beenden

11.10.5 Ein Beispiel zu einem klassischen Web Worker

11.11 Deferred Object und Promises

11.11.1 Das Umfeld – Promises

11.11.2 Die speziellen jQuery-Methoden zum Umgang mit einem Deferred Object

11.11.3 Ein konkretes Beispiel mit Deferred Objects

11.12 Ajax mit Deferred Objects

11.12.1 Generische Ajax-Methoden mit then() verketten

11.12.2 Das Laden von Skripts mit Deferred Objects

11.12.3 JSONP und Deferred Objects

11.12.4 Mehrere Ajax-Anfragen ausführen und synchronisieren

11.13 Das Callbacks Object

11.14 Zusammenfassung

12 jQuery UI

12.1 Was versteht man unter jQuery UI?

12.1.1 Komponenten zur Unterstützung der Interaktion

12.1.2 Widgets

12.1.3 Erweiterte Effekte

12.1.4 Das Themen-Framework samt ThemeRoller

12.2 Der Einstieg in jQuery UI

12.3 Wie nutzt man jQuery UI grundsätzlich?

12.3.1 Download und der ThemeRoller

12.3.2 Die Bereitstellung und Einbindung lokaler Ressourcen

12.3.3 Einbindung über ein CDN

12.4 Verwenden der Komponenten in jQuery UI

12.4.1 Die Defaulteinstellung

12.4.2 Einige grundsätzliche Regeln zu Komponenten und Widgets

12.4.3 Eigenschaften/Optionen von Komponenten

12.4.4 Methoden von Komponenten

12.4.5 Events bei Komponenten und Widgets

12.5 Ein Überblick über die Komponenten und Widgets

12.5.1 Die Interaktionskomponenten

12.5.2 Die Widgets

12.6 Effekte

12.6.1 Die Methode effekt()

12.6.2 Farbanimationen mit animate()

12.7 Zusammenfassung

13 jQuery Mobile

13.1 Grundlagen

13.1.1 Die Plattformen

13.1.2 Widgets und Features

13.1.3 Download und Bereitstellung

13.1.4 Themes und der ThemeRoller

13.2 Das Rollensystem und data-role

13.3 Der grundsätzliche Aufbau einer mobilen Seite

13.3.1 Ein erstes vollständiges Beispiel

13.4 Verknüpfen von Seiten

13.4.1 Externe Links mit Hijax

13.4.2 Interne Links und das spezielle Verständnis einer Seite

13.4.3 Zurück in der Historie

13.5 Die Übergänge

13.6 Dialoge

13.7 Schaltflächen

13.7.1 Schaltflächen mit Icons

13.7.2 Blockelement oder Inline-Element

13.7.3 Gruppierung

13.8 Toolbars und Navigationsbars

13.9 Listen

13.10 Formularelemente

13.10.1 Feldcontainer

13.10.2 Die verschiedenen Formularelemente

13.10.3 Deaktivieren von Elementen

13.10.4 Plugin-Methoden bei Formularelementen

13.10.5 Abschicken der Formulardaten

13.11 Spezielle Ereignisse

13.11.1 Berührungsereignisse

13.11.2 Änderung der Orientierung

13.11.3 Verschiebeereignisse

13.11.4 Seitenereignisse

13.11.5 Ein Beispiel mit Reaktionen auf Events

13.12 Kollabierte und expandierte Inhalte

13.13 Zusammenfassung

14 Plugins

14.1 Die Plugin-Seiten von jQuery

14.2 Ein vorhandenes Plugin suchen und verwenden

14.3 Eigene Plugins erstellen

14.3.1 Warum eigene Plugins erstellen?

14.3.2 Erstellen eines ersten Plugins

14.3.3 Die wesentlichen Regeln zur Erstellung eines einfachen Plugins

14.3.4 Regeln zur Erstellung komplexerer Plugins

14.3.5 Ein Beispiel für ein Plugin mit Optionen

14.3.6 Ein weiteres Beispiel für ein Plugin mit Optionen

14.3.7 Ein Plugin veröffentlichen

14.4 Zusammenfassung

15 Das Habitat rund um jQuery

15.1 Sizzle

15.2 QUnit

15.2.1 xUnit-Testing

15.3 Bootstrap

15.3.1 Responsive Design

15.3.2 Bootstrap zur Umsetzung von RWD

15.3.3 Herunterladen von Bootstrap

15.3.4 Eine Basis-Vorlage

15.3.5 Ein Kontaktbeispiel

15.4 Zusammenfassung

16 Anhang

16.1 Grundlagen zu JavaScript

16.1.1 Case-Sensitivität

16.1.2 Variablen, Literale und Datentypen

16.1.3 Funktionen und Methoden

16.1.4 Objekte in JavaScript

16.2 Die Webseite zum Buch

Ralph Steyer

jQuery

Das universelle JavaScript-Framework für das interaktive Web und mobile Apps

2., aktualisierte Auflage

Die Autoren:

Ralph Steyer, Bodenheim
Kontakt: ralph.steyer@rjs.de>

Alle in diesem Buch enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autoren und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht.

Ebenso übernehmen Autoren und Verlag keine Gewähr dafür, dass beschriebene Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen­ und Markenschutz­Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.

Bibliografische Information der Deutschen Nationalbibliothek: Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) – auch nicht für Zwecke der Unterrichtsgestaltung – reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.

Lektorat: Brigitte Bauer-Schiewek
Copyediting: Petra Kienle, Fürstenfeldbruck
Umschlagdesign: Marc Müller-Bremer, München, www.rebranding.de
Umschlagrealisation: Stephan Rönigk

Print-ISBN 978-3-446-45558-0
E-Book-ISBN 978-3-446-45651-8

Verwendete Schriften: SourceSansPro und SourceCodePro (Lizenz)
CSS-Version: 1.0

Font License Zurück zum Impressum

Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Vorwort

Das World Wide Web ist schon viele Jahre unglaublich erfolgreich und hat sich gerade die letzten Jahre bezüglich seiner zukünftigen technischen Basis als auch der Form der Darstellung von Inhalten sowie der Interaktion mit dem Anwender und der Dynamik stark weiterentwickelt. Das Stichwort Dynamik deutet schon an, dass statische, passive Webseiten überholt sind und immer seltener werden. Bereits die Gegenwart und insbesondere die Zukunft gehören sogenannten Rich Internet Applications (RIAs). Gerade aber diese interaktiven Seiten und Applikationen im Web sind ohne geeignete Frameworks kaum noch effektiv zu erstellen und zu warten, nicht zuletzt auch deswegen, weil viele optische sowie funktionale Features wie animierte Inhaltsaufbereitung oder komfortable Benutzereingabemöglichkeiten mittlerweile verbreitet sind und vom verwöhnten Anwender ebenfalls erwartet werden. Dementsprechend wird jedoch der Aufwand zur Erstellung von solchen Webangeboten immer größer.

Nun war es einige Jahre nicht wirklich deutlich zu erkennen, in welche Richtung sich das World Wide Web zur Umsetzung solcher anspruchsvoller Applikationen wirklich entwickelt. Es gab längere Zeit verschiedene technische Ansätze, die als verschiedene Optionen für die Zukunft des Webs offen waren. Aber wenn Sie aktuell die populären und halbwegs modern gemachten interaktiven Angebote im World Wide Web betrachten, werden Sie eigentlich nur noch konservativ programmierte Applikationen auf Basis von Ajax (Asynchronous JavaScript and XML) sowie klassisches DHTML (Dynamic HTML) vorfinden. Ein paar Seiten setzen vielleicht noch auf das veraltete, proprietäre Flash, aber die verschwinden mehr und mehr. Daneben gab es aber über eine geraume Zeit Versuche, neuere proprietäre Techniken wie JavaFX, Silverlight oder AIR/Flex einzusetzen und teils sogar vollkommen auf HTML, CSS und JavaScript zu verzichten. Aber die Aktivitäten der Hersteller in Hinsicht auf die Weiterentwicklung mit proprietären Ansätzen ist mittlerweile fast vollkommen zum Erliegen gekommen.

Dementsprechend setzen aktuell für interaktive anspruchsvolle Webapplikationen die meisten Firmen, Organisationen sowie auch Privatanwender weiter ganz konservativ auf dynamisches HTML und Ajax, zumal sich mit HTML 5 und CSS 3 offene Standards etablieren, die zudem auch von den Anbietern der proprietären Techniken ganz offiziell unterstützt werden. Und nicht zuletzt setzen die großen – in der Hinsicht unabhängigen – Hersteller wie Google oder Apple ebenso explizit auf HTML 5 und CSS 3 für die Zukunft.

Ihnen sollte nun etwas aufstoßen, dass ich im Zusammenhang mit Ajax und HTML5/CCS3 von konservativ spreche. Es ist noch nicht ganz so lange her, da war Ajax das Buzzword schlechthin im World Wide Web. Ajax ist die programmiertechnische Basis dessen, was um das Jahr 2005/2006 als Web 2.0 in aller Munde war. Immerhin hat erst Ajax es möglich gemacht, bei Bedarf nur die Inhalte einer Webseite auszutauschen, die tatsächlich neu vom Webserver angefordert werden müssen. Die bereits geladene Webseite bleibt bei einer Datennachforderung per Ajax im Browser vorhanden und mittels DHTML wird gezielt an einer bestimmten Stelle in der Webseite ein Austausch bestehenden Inhalts durch die neu nachgeladene Information vorgenommen. Dabei kann die nachgeladene Information entweder aus Klartext (inklusive HTML-Fragmenten) oder aus strukturiertem XML oder JSON (JavaScript Object Notation) bestehen. Die Vorteile dieser Vorgehensweise sind bei stark interaktiven Applikationen mit häufigem Serverkontakt sofort offensichtlich und mittlerweile voll etabliert.

Dennoch bedeutet die Verwendung von Ajax respektive DHTML keinen Einsatz von modernen Webtechniken, denn die Grundlagen dieser damit zusammengefassten Technologien gibt es alle bereits seit 1997, was meine Bezeichnung als konservativ verdeutlicht. Und dass sich Ajax erst fast zehn Jahre später wie eine Explosion über das World Wide Web verbreitet hat, zeigt aus meiner Sicht ganz deutlich, dass das Internet und das World Wide Web in der Entwicklung recht träge, konservativ und langsam sind. Diese von mir provokant formulierte These soll nun das Internet und das World Wide Web nicht diskreditieren! Es ist nur so, dass sich im Internet Technologien nur sehr langsam durchsetzen können, weil sich alle Beteiligten an diesem komplexen, sehr sensiblen Gebilde World Wide Web auf eine gemeinsame Basis einigen müssen. Und das dauert eben! In der Regel viele Jahre. Und auf Dauer setzt sich scheinbar im Web nur das durch, was gut und einfach ist.

Wenn Sie nun aber eine moderne Webapplikation auf Basis von Ajax und DHTML erstellen wollen, ist eine Programmierung von Hand wie erwähnt sehr aufwendig und fehlerträchtig. Zwar ist das grundsätzliche Erstellen von DHTML- bzw. Ajax-Applikationen nicht sonderlich schwierig, wenn man die Grundlagentechniken HTML bzw. XHTML, CSS und JavaScript beherrscht. Das Zusammenspiel dieser – einzeln gesehen – in der Tat recht einfachen Webtechnologien im Client kann jedoch äußerst diffizil sein, was nicht zuletzt ein Resultat der Browserkriege des letzten Jahrtausends ist. Dazu kommen im Fall von Ajax oft noch der permanente Austausch von Daten zwischen Client und Webserver sowie die sehr feingliedrige Verteilung von Geschäftslogik zwischen Client und Server hinzu.

Zudem erzwingt die eingeschränkte Leistungsfähigkeit von JavaScript oft eine nicht ganz triviale Programmierung von Strukturen, die in leistungsfähigeren (insbesondere objektorientierten) Programmiertechniken auf dem Silbertablett serviert werden. So gesehen ist die Erstellung einer interaktiven Applikation für das Web heutzutage durchaus mit der Komplexität der Erstellung einer Desktop-Applikation bzw. einer verteilten Netzwerkapplikation zu vergleichen, wenn sie sich an den aktuellen Ansprüchen der Konkurrenz messen will. Das erkenne ich auch daran, dass in meinen Schulungen zu JavaScript, Ajax oder CSS mehr und mehr Programmierer sitzen, die aus mächtigen Sprachen wie Java oder C# kommen (früher war das Vorwissen im Programmierumfeld eher geringer). Für mich ist das ein deutliches Zeichen, dass die Ansprüche an eine moderne RIA steigen und von reinen Designern nicht mehr erfüllt werden können. Anders ausgedrückt – mit modernen RIAs ist das Web endgültig den Kinderschuhen entwachsen.

Nicht zuletzt bringt die Erstellung von modernen Webseiten und insbesondere Ajax-RIAs ein hohes Maß an Tests und Anpassung an verschiedene Webbrowser und Plattformen mit sich. An den unterschiedlichsten Stellen warten tückische Fallstricke. Natürlich ist die manuelle Erstellung von komplexen DHTML-Aktionen wie Drag & Drop oder animierten Menüs nicht jedermanns Sache. Ihnen sind sicher ebenfalls die oft extrem diffizilen Abhängigkeiten von den verschiedenen Browsern, Browserversionen und Betriebssystemplattformen bekannt. Diese Probleme nehmen zwar in modernen Browsern ab, sind aber immer noch vorhanden und zudem nutzen gerade viele Firmen auch noch alte Browser.

Sogenannte Frameworks und Toolkits für Ajax bzw. JavaScript versprechen nun für viele Aufgabenstellungen und Probleme im Umfeld von modernen Webseiten Abhilfe. Sie stellen vielfach vor allem JavaScript-Funktionsbibliotheken mit getesteten und hochfunktionellen Lösungen sowie ausgereifte Style Sheets bereit, damit Sie nicht jedes Mal das Rad neu erfinden und dessen einwandfreie Funktionalität umfangreich testen müssen. Dazu gibt es gelegentlich auch spezielle Tools und Programme, die eine Arbeit mit diesen Bibliotheken unterstützen oder gar erst möglich machen. Auch bringen einige mächtige HTML-Editoren mittlerweile sogar eigene Frameworks mit.

Wir werden uns in diesem Buch nun – wie der Titel unzweifelhaft aussagt – jQuery widmen und schauen, wie Sie dieses geniale Framework einsetzen können, um Ihre Webapplikationen zu verbessern bzw. die Erstellung zu vereinfachen oder bestimmte Features gar erst möglich zu machen. Wenn Sie die Möglichkeiten von jQuery nicht schon kennen, lassen Sie sich positiv überraschen, wie einfach Ihnen dieses mächtige Werkzeug Webseiten ermöglicht, die alle moderne Effekte und Features enthalten.

Zu diesem Einstieg in jQuery wünsche ich Ihnen viel Spaß und viel Erfolg. Doch vorher möchte ich ein paar abschließende Bemerkungen zu meiner Person machen. Meinen Namen werden Sie auf dem Buchumschlag oder am Ende des Vorworts gelesen haben – Ralph Steyer. Ich habe in Frankfurt/Main an der Goethe-Universität Mathematik studiert (Diplom) und danach anfangs einen recht typischen Werdegang für Mathematiker genommen – ich bin erst einmal bei einer großen Versicherung gelandet, aber schon da mit EDV-Schwerpunkt. Zunächst arbeitete ich einige Jahre als Programmierer mit Turbo Pascal und später mit C und C++. Nach vier Jahren wechselte ich in die fachliche Konzeption für eine Großrechnerdatenbank unter MVS. Die Erfahrung war für meinen Schritt in die Selbstständigkeit sehr motivationsfördernd, denn mir wurde klar, dass ich das nicht auf Dauer machen wollte. Seit 1996 verdiene ich daher meinen Lebensunterhalt als Freelancer, wobei ich fliegend zwischen der Arbeit als Fachautor, Fachjournalist, EDV-Dozent, Consultant und Programmierer wechsele. Daneben referiere ich gelegentlich auf Webkongressen, unterrichte an verschiedenen Akademien und Fachhochschulen, übersetze gelegentlich Fachbücher oder nehme Videotrainings auf. Das macht aus meiner Sicht einen guten Mix aus, bewahrt vor beruflicher Langeweile und hält mich sowohl in der Praxis als auch am Puls der Entwicklung. Insbesondere habe ich das Vergnügen und gleichzeitig die Last, mich permanent über neue Entwicklungen auf dem Laufenden zu halten, denn die Halbwertszeit von Computerwissen ist ziemlich kurz. Dementsprechend ist mein Job zwar anstrengend, aber vor allem immer wieder spannend. Doch nun ab in die Welt von jQuery!

Ralph Steyer

Frühjahr 2018

1 Einleitung