Suchen und Finden
Inhaltsverzeichnis
4
Vorwort
12
1 JavaScript: Ein Überblick
14
1.1 Webanwendungen
14
1.2 Serverseitige Webanwendungen
15
1.3 Eingebettet
16
1.4 JavaScript als Wunderwaffe?
17
1.5 Zusammenfassung
18
2 Willkommen in der Welt von jQuery
20
2.1 Herunterladen und Einbinden von jQuery
20
2.1.1 Download von der jQuery-Webseite
21
2.1.2 Verwendung eines CDN
23
2.1.3 Welcher Weg ist der bessere?
25
2.2 jQuery vs. JavaScript
25
2.3 Dokumententraversierung
28
2.3.1 CSS-Selektoren
28
2.3.2 Element-Sets
31
2.3.3 Fluent Interface
32
2.3.4 Traversierung der Baumstruktur
32
2.3.5 jQuerys Gedächtnis für Sets
34
2.4 Dokumentenmanipulation
35
2.4.1 CSS-Eigenschaften
35
2.4.2 Umgang mit Attributen und CSS-Klassen
38
2.4.3 Erstellen neuer Elemente
40
2.4.4 Elemente im DOM platzieren
42
2.4.5 Inhalte von Elementen auslesen und verändern
43
2.4.6 Elemente ersetzen, umhüllen oder löschen
47
2.4.7 Elemente aus dem DOM lösen
51
2.4.8 Optische Position und Größe
51
2.4.9 Callbacks anstelle von Werten mit jQuery 1.4
56
2.5 Ereignisbehandlung
57
2.5.1 Ereignisse registrieren mit jQuery
57
2.5.2 Das Event-Objekt
58
2.5.3 Ereignisregistrierungen wieder aufheben
59
2.5.4 Ereignisse auslösen
60
2.5.5 Umgang mit benutzerdefinierten Ereignissen
61
2.5.6 Abkürzungen zur Ereignisregistrierung
62
2.5.7 Ereignisnamensräume
64
2.5.8 Der Weg eines Ereignisses
65
2.5.9 Ereignisdelegation
66
2.5.10 Ereignisse außerhalb von Elementen
70
2.5.11 Die Proxy-Funktion
73
2.6 Animation
75
2.6.1 CSS-Eigenschaften über die Zeit verändern
75
2.6.2 Relative Werte als Animationsziel
76
2.6.3 Werte mit spezieller Bedeutung
77
2.6.4 Mehrschrittige Animationen
78
2.6.5 Animationen während der Ausführung anhalten
80
2.6.6 Eine Easing-Funktion pro Eigenschaft
80
2.6.7 Animieren mit Abkürzungen
80
2.7 AJAX mit jQuery
82
2.7.1 JSON
83
2.7.2 Verschiedene Kommunikationswege
85
2.7.3 Die ajax-Funktion
90
2.7.4 Globale AJAX-Optionen mit ajaxSetup
99
2.7.5 Abkürzungen auf dem Weg zu neuen Daten
100
2.8 Zusammenfassung
102
3 jQuery-Plug-ins
104
3.1 Was sind jQuery-Plug-ins?
104
3.2 Unterschiedliche Plug-in-Typen
105
3.2.1 Neue Methoden
106
3.2.2 Neue Funktionen
108
3.2.3 Special Events
108
3.2.4 Animations Easing-Funktionen
108
3.2.5 CSS-Selektoren
109
3.2.6 Widgets
109
3.2.7 Effects
109
3.2.8 Behaviours
110
3.3 Grundregeln der Plug-in-Entwicklung
110
3.3.1 Konventionen zur Namensgebung
110
3.3.2 Zugriff auf die jQuery-Bibliothek
112
3.3.3 Anlegen neuer Set-Methoden
114
3.3.4 Anlegen neuer Funktionen
115
3.3.5 Beachtung des Fluent-Interface
115
3.3.6 Multiple Elemente eines Sets korrekt behandeln
116
3.4 Grundgerüst
117
3.5 Zusammenfassung
118
4 Hello World
120
4.1 Anforderungen an das Plug-in
120
4.2 Grundgerüst des world-Plug-ins
120
4.3 Behandlung von Optionen
121
4.3.1 Implementierung der Optionsbehandlung
122
4.4 Manipulation des DOM
125
4.5 Das vollständige Plug-in
126
4.6 Zusammenfassung
127
5 Objektorientierung
128
5.1 Konzept der Objektorientierung
128
5.1.1 Ein Beispiel bitte!
129
5.2 Klassen != Prototypen
130
5.2.1 Objekte in JavaScript
131
5.2.2 Prototypen
134
5.2.3 Konstruktorfunktionen
138
5.3 Zurück zum Bankszenario
140
5.3.1 Der Prototyp für das Kundenobjekt
140
5.3.2 Der Prototyp für das Kontenobjekt
141
5.3.3 Anlegen neuer Kunden- und Kontenobjekte
142
5.4 Prototype Chains
142
5.4.1 Ketten von Prototypen
143
5.4.2 Ein weiteres Hindernis: Konstruktorfunktionen
145
5.5 Zurück zum Bankszenario II
147
5.6 Zusammenfassung
148
6 Livesearch
150
6.1 Livesearch im Detail
150
6.2 Aufgaben des Plug-ins
151
6.3 Kategorisierung des Plug-ins
153
6.3.1 Objektorientiertes Design
153
6.3.2 Objektorientierung nicht zum Selbstzweck
154
6.4 Das übliche Grundgerüst
154
6.5 Das _Livesearch-Objekt
156
6.5.1 Der Konstruktor
156
6.5.2 Methode: disableNativeAutocomplete
158
6.5.3 Methode: createListContainer
159
6.5.4 Methode: createSearchFunction
161
6.5.5 Methode: attachToTarget
165
6.5.6 moveCursor-Methode
170
6.5.7 closeAutocompleteList-Methode
172
6.5.8 renewSearchDelay-Methode
173
6.5.9 abortRunningSearch-Methode
175
6.5.10 executeSearch-Methode
175
6.5.11 resultReceived-Methode
176
6.6 Glückwunsch zum ersten echten Plug-in
177
6.7 Zusammenfassung
178
7 Neue Funktionen für jQuery
180
7.1 Kurzeinführung in REST
180
7.2 Die Funktionen $.put, $.head und $.delete
181
7.2.1 Die Definition von Funktionen
182
7.3 Zusammenfassung
184
8 Special Events
186
8.1 Aufbau eines Special Events
186
8.1.1 Magische Methoden
187
8.2 Existierende Ereignisse erweitern
190
8.2.1 Ein angemessener Mauszeiger für alle Elemente
190
8.3 Drag and Drop
191
8.3.1 Die Ereignisse „dragstart“, „dragmove“ und „dragend“
192
8.3.2 Das Kernstück: _Handler
193
8.4 Tastaturshortcuts mit „add“ und „remove”
196
8.4.1 Erweiterung des keypress-Ereignisses
197
8.5 Zusammenfassung
199
9 CSS-Selektoren entwickeln
200
9.1 Sizzle
200
9.1.1 Geschichte von Sizzle
200
9.1.2 Sizzles Erweiterungsmöglichkeiten
201
9.2 Neue Pseudoklassen für jQuery
205
9.2.1 Die Pseudoklasse :draggable
205
9.2.2 Die Pseudoklasse :ev
208
9.3 Zusammenfassung
210
10 Easing-Funktionen zur Animationskontrolle
212
10.1 Easing-Funktionen im Allgemeinen
212
10.2 jQuerys Dreingaben: linear und swing
212
10.2.1 Easing auf einen Blick: Grafische Darstellung
212
10.2.2 jQuerys Interface für Easing-Funktionen
213
10.3 Weitere Easing-Funktionen mit dem Easing- Plug-in
218
10.3.1 Grafische Übersicht über die Funktionen des Plug-ins
219
10.4 Zusammenfassung
223
11 jQuery UI
224
11.1 Installation und Einsatz
225
11.2 Bereiche des Frameworks
227
11.3 Widgets und Behaviours im Einsatz
228
11.3.1 Das Widget-API
228
11.3.2 Behaviours
231
11.4 Animationen und Effekte
233
11.4.1 Effekte – Das neue Pferd im Stall
233
11.4.2 Farbanimationen und Klassenübergänge
234
11.4.3 Easing – Übergänge mit Niveau
237
11.5 ThemeRoller
237
11.6 Entwicklung eigener jQuery UI Widgets
238
11.6.1 Widget oder Plug-in?
239
11.6.2 Ziel: Das myprogressbar-Widget
240
11.6.3 Die Widget Factory
241
11.6.4 Verarbeitung von Optionen
243
11.6.5 Magische Methoden und Eigenschaften
246
11.6.6 Widgets erschaffen und zerstören
250
11.6.7 Rückgabe eines konkreten Wertes
252
11.7 Behaviours entwickeln
254
11.7.1 Behaviour: destroyable
254
11.8 Komplexe Effekte zum Selbermachen
258
11.8.1 registrierung des eigenen Effekts
258
11.8.2 Effektoptionen behandeln
259
11.8.3 Hilfsmittel zur Effektentwicklung
260
11.8.4 Der grid-Effekt im Detail
262
11.9 Widgets fit für den ThemeRoller
268
11.9.1 jQuery-UI-CSS-Framework
268
11.9.2 Namensgebung für eigene CSS-Klassen
270
11.10 Zusammenfassung
271
12 Testen von Software
272
12.1 Verschiedene Stufen des Testens
272
12.2 Unit Tests in JavaScript
274
12.2.1 Testframeworks
274
12.3 QUnit
275
12.3.1 Download und Dokumentation
275
12.3.2 Einrichten einer Testumgebung
275
12.3.3 Der erste Unit Test
278
12.3.4 Assertions
281
12.3.5 Das xUnit-Pattern und QUnit
284
12.3.6 HTML Fixtures
287
12.3.7 Ereignisbehandlung testen
290
12.3.8 Asynchrone Aufrufe testen
293
12.3.9 FireUnit mit QUnit verheiraten
296
12.4 Mocks und Stubs
297
12.4.1 Simulation Stubs
298
12.4.2 Mock-Objekte
301
12.4.3 Sinon.JS – Stubs, Mocks und Spys
301
12.4.4 Sinon.JS und der fakeXMLHttpRequest
302
12.4.5 Ein Stub für die Zeit
305
12.5 JsTestDriver
310
12.5.1 Client/Server-Architektur
311
12.5.2 Installation und Einrichtung einer Testumgebung
312
12.5.3 Assertions
319
12.5.4 Testlebenszyklen
321
12.5.5 HTML-Fixtures
322
12.5.6 Asynchrone Tests mit JsTestDriver
325
12.5.7 Code-Coverage-Analyse
325
12.5.8 Legacy-Tests: QUnit-Tests mit JsTestDriver ausführen
330
12.6 Zusammenfassung
331
Stichwortverzeichnis
334
Symbole
334
A
334
B
334
C
335
D
335
E
336
F
337
G
337
H
337
I
338
J
338
K
338
L
339
M
339
N
339
O
339
P
340
Q
340
R
340
S
341
T
341
U
342
V
342
W
342
X
343
Y
343
Z
343
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.