jQuery - Vom Novizen zum Ninja
Transcription
jQuery - Vom Novizen zum Ninja
60173-3 U1+U4 29.05.12 14:45 Seite 1 Aus dem Inhalt: • Sich in jQuery verlieben • Selektieren: Das Herz von jQuery jQuery Vom Novizen zum Ninja jQuery ist die beliebteste JavaScript-Klassenbibliothek! Als Programmierer sparen Sie enorm viel Zeit durch den Einsatz von jQuery. Hier erfahren Sie, wie Sie mit jQuery • Grundlegende Animationen und Effekte: Verbergen und Aufdecken, Ein- und Ausblenden • Animieren, Scrollen und Skalieren • Bilder und Slideshows, Lightbox • Expandierende Menüs, Accordion-Menüs • Tabs, Tooltips und Panels • Struktur, Ajax und Interaktivität Ihrer Website beeindruckende Animationen und besondere • Formulare, Kontrollelemente und Dialoge Interaktivität verleihen können. Auch jQuery Mobile und • Listen, Baumstrukturen und Tabellen der Unterstützung mobiler Geräte ist ein eigenes Kapitel • Plugins und fortgeschrittene Techniken gewidmet. Lernen Sie mit diesem Buch die fortgeschrittenen • Theme Rolling Techniken und werden Sie zum echten jQuery-Ninja! • jQuery Mobile 씰 Animationen und Bildergalerien mit jQuery Wer die Besucher seiner Website beeindrucken will, wird an den Animationen seine Freude haben, die mit jQuery über wenige Zeilen Code erstellt werden können. Auch die Erstellung von Slideshows, einer Lightbox, Bild-Miniaturübersichten und überblendbaren Bildergalerien wird hier gezeigt. 씰 Formulare und Dialoge Die Erstellung von Formularen ist oft eine lästige Aufgabe, aber auch hier hilft jQuery. Nicht nur die Erstellung wird wesentlich einfacher – Sie lernen auch, wie Sie Formulare blitzschnell validieren, dem Anwender Über die Autoren: Earle Castledine (aka Mr Speaker) ist als bekannter JavaScript- und jQuery-Experte weltweit an Entwicklungen beteiligt und auf internationalen Konferenzen zu Web-Themen mit Vorträgen vertreten. Unterstützung anbieten und Elemente wie Checkboxen, Radio Buttons oder Auswahllisten einsetzen. Dazu kommen Interaktionsmöglichkeiten wie Datumswähler, Schieberegler und Drag and Drop. 씰 Plugins, Themes und fortgeschrittene Techniken Über die Benutzung der üblichen UI-Komponenten hinaus bietet jQuery eine fantastische Plugin-Architektur. In einem eigenen Abschnitt wird verraten, wie Plugins erstellt werden und wie Sie sie grafisch an Ihre Vorstellungen anpassen. Know-how ist blau. Earle Castledine Craig Sharkie • CSS mit jQuery Craig Sharkie arbeitete als Programmierer für einige große Namen des Web, u. a. AOL, Microsoft und Yahoo. Sein Weg hat ihn vom Journalismus über die Beschäftigung als Entwickler und einige internationale Vorträge nun auch zur Tätigkeit als Buchautor geführt. Auf www.buch.cd jQuery Vom Novizen zum Ninja Earle Castledine Craig Sharkie Castledine Sharkie Web-Entwicklung jQuery Vom Novizen zum Ninja > Das JavaScript-Framework professionell einsetzen > Interaktive Elemente in Webseiten integrieren > Eindrucksvolle Animationen mit wenigen Zeilen Code erstellen Der komplette Quellcode des Buches. Scripte zum sofortigen Einsatz. Besuchen Sie unsere Website www.franzis.de 30,– EUR [D] ISBN 978-3-645-60173-3 Profi-Wissen für alle jQuery-User 60173-3 Titelei_X 29.05.12 14:46 Seite 1 Earle Castledine / Craig Sharkie jQuery Vom Novizen zum Ninja 60173-3 Titelei_X 29.05.12 14:46 Seite 3 Earle Castledine Craig Sharkie jQuery Vom Novizen zum Ninja 60173-3 Titelei_X 29.05.12 14:46 Seite 4 Bibliografische Information der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte Daten sind im Internet über http://dnb.ddb.de abrufbar. Alle Angaben in diesem Buch wurden vom Autor mit größter Sorgfalt erarbeitet bzw. zusammengestellt und unter Einschaltung wirksamer Kontrollmaßnahmen reproduziert. Trotzdem sind Fehler nicht ganz auszuschließen. Der Verlag und der Autor sehen sich deshalb gezwungen, darauf hinzuweisen, dass sie weder eine Garantie noch die juristische Verantwortung oder irgendeine Haftung für Folgen, die auf fehlerhafte Angaben zurückgehen, übernehmen können. Für die Mitteilung etwaiger Fehler sind Verlag und Autor jederzeit dankbar. Internetadressen oder Versionsnummern stellen den bei Redaktionsschluss verfügbaren Informationsstand dar. Verlag und Autor übernehmen keinerlei Verantwortung oder Haftung für Veränderungen, die sich aus nicht von ihnen zu vertretenden Umständen ergeben. Evtl. beigefügte oder zum Download angebotene Dateien und Informationen dienen ausschließlich der nicht gewerblichen Nutzung. Eine gewerbliche Nutzung ist nur mit Zustimmung des Lizenzinhabers möglich. © 2012 Franzis Verlag GmbH, 85540 Haar bei München Authorized German translation of the English edition of jQuery Novice to Ninja 2nd ed (ISBN 9780987153012) © 2012, SitePoint Pty Ltd. This translation is published and sold by permission of O'Reilly Media, Inc. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Das Erstellen und Verbreiten von Kopien auf Papier, auf Datenträgern oder im Internet, insbesondere als PDF, ist nur mit ausdrücklicher Genehmigung des Verlags gestattet und wird widrigenfalls strafrechtlich verfolgt. Die meisten Produktbezeichnungen von Hard- und Software sowie Firmennamen und Firmenlogos, die in diesem Werk genannt werden, sind in der Regel gleichzeitig auch eingetragene Warenzeichen und sollten als solche betrachtet werden. Der Verlag folgt bei den Produktbezeichnungen im Wesentlichen den Schreibweisen der Hersteller. Lektorat: Anton Schmid Satz: DTP-Satz A. Kugge, München art & design: www.ideehoch2.de Druck: GGP Media GmbH, Pößneck Printed in Germany ISBN 978-3-645-60173-3 5 Vorwort Egal, welcher Typ von Ninja Sie sind – ein kochender, ein rechtsprechender oder gar ein wahrer Ninja – Ihre Virtuosität beginnt damit, die grundlegenden Methoden Ihres Fachs zu meistern. Sobald Sie diese beherrschen, liegt es in Ihren Händen als versierter Ninja, dieses Wissen kreativ und originell anzuwenden. In jüngster Zeit hat jQuery sich als einfaches, aber leistungsstarkes Instrument erwiesen, um Webseiten zu kontrollieren und zu transformieren, wobei Sie selbst den widerspenstigsten und ältesten Browsern Ihren Willen aufzwingen können. jQuery ist eine Bibliothek, die den beiden grundlegenden Zwecken dient, Elemente auf einer Webseite zu verändern und sie mit Ajax-Requests zu versorgen. Natürlich muss man dazu einige Befehle beherrschen, doch sie sind stimmig und leicht zu erlernen. Sobald Sie Ihre ersten Aktionen geschrieben haben, werden Sie sich den jQuery-Bausteinen derart hingeben, dass Ihre Freunde und Familie sich wünschen würden, Sie wären nie eingestiegen! Ganz oben auf der Liste der jQuery-Bibliothek steht jQuery UI: ein Set mit ansehnlichen Kontrollfunktionen und Widgets (wie Accordions, Tabs und Dialogen), das mit einer Sammlung von umfangreichen Behaviors zur Implementierung eigener Kontrollfunktionen einhergeht. Mit jQuery UI basteln Sie mühelos fantastische Interfaces zusammen! Im Grunde genommen ist jQuery ein Tool, mit dem wir die Benutzerfreundlichkeit unserer Webseiten und damit die Erfahrungen der Nutzer verbessern können. Die Benutzerfreundlichkeit bezieht sich auf die Untersuchung der Prinzipien zur beabsichtigten Effizienz oder Eleganz eines Objekts. Mit dem bloßen Schein von trendigem Design hat jQuery nichts zu tun, vielmehr können wir damit unsere Seiten auf ebenso raffinierte wie außergewöhnliche Weise rasch gestalten: das Spektrum reicht von der gekonnten Ausarbeitung eines einfachen Sliding Panel bis hin zum Implementieren einer ganz neuen Nutzer-Interaktion, die Sie fast im Schlaf erfinden können. Ein Ninja zu werden bedeutet nicht, dass man eine API herauf- und herunterzubeten lernt, denn das zeugt nur von einem guten Gedächtnis. Das wahre Können und sein Nutzen entstehen dann, wenn Sie Ihr Wissen anwenden, um etwas Außergewöhnliches zu vollbringen: etwas, das die vereinten bisherigen Erkenntnisse nutzt, um noch ein wenig besser zu sein als alles, was bisher vollbracht wurde. Definitiv kein einfaches Unterfangen, doch dank jQuery macht bereits der Versuch Spaß! Wer dieses Buch lesen sollte Wenn Sie ein Front-End-Webdesigner sind, der auf seinen Seiten mit coolen Interaktionen aufwarten möchte, das ganze Gerede über jQuery mitbekommen hat und herausfinden will, was daran wahr ist, wird Sie dieses Buch auf die richtige Spur bringen. Wenn Sie sich mit JavaScript herumschlagen und von der Komplexität scheinbar harmloser Aufgaben frustriert sind, zeigen wir Ihnen, wie jQuery helfen kann. Selbst wenn Sie mit den Grundlagen von jQuery vertraut sind, aber Ihre Fähigkeiten auf ein höheres Level 6 Vorwort bringen möchten, werden Sie tiefgreifende Einblicke und eine Fülle an Ratschlägen zu guter Codierung erhalten. Sie sollten bereits etwas Erfahrung mit fortgeschrittenem HTML und CSS-Regeln haben, da jQuery Seitenelemente mit CSS-Stilen formatiert. Grundlegende Programmierkenntnisse sind hilfreich, denn jQuery basiert – trotz seiner schlauen Abstraktionen – immer noch auf JavaScript. Angesichts dessen haben wir versucht, den Einsatz all unserer JavaScript-Konzepte zu erklären, sodass Sie schnelle Erfolge erzielen werden. Was in diesem Buch steht Wenn Sie am Ende dieses Buchs angelangt sind, werden Sie in der Lage sein, ihren bislang statischen HTML- und CSS-Webseiten mit dem Zauber von jQuery Leben einzuhauchen. Sie erfahren, wie Sie Elemente auf einer Seite auswählen, bewegen oder gänzlich entfernen und wie Sie mit Ajax neue Elemente hinzufügen und animieren können … kurzum, wie Sie es schaffen, HTML und CSS Ihrem Willen zu beugen! Wir beschäftigen uns auch mit der umfangreichen Funktionalität der jQuery-UI-Bibliothek und untersuchen das jüngst erschienene Framework von jQuery Mobile. Dieses Buch umfasst die folgenden neun Kapitel sowie drei Anhänge. Wenn Sie die Thematik vollständig erfassen wollen, lesen Sie es in der Reihenfolge vom Anfang bis zum Ende durch; nach Bedarf steigen Sie einfach dort ein, wo Sie die Fortbildung zu einem spezifischen Thema benötigen. Kapitel 1: Sich in jQuery verlieben Bevor wir all die Besonderheiten von jQuery vorstellen, geben wir einen Ausblick, warum Sie jQuery überhaupt erst nutzen sollten: warum es zu mehr taugt als zum Verfassen eigener JavaScripte und warum es besser ist als andere JavaScript-Bibliotheken. Wir frischen einige CSS-Konzepte auf, die den Schlüssel zum Verständnis für jQuery darstellen, und führen Sie in die grundlegende Syntax ein. Kapitel 2: Auswählen, Dekorieren und Verbessern Der offenkundigste Vorteil von jQuery gegenüber bloßem JavaScript liegt in der Leichtigkeit, mit der Sie Ihre Zielelemente auf einer Seite auswählen können, um mit ihnen zu spielen. Wir beginnen dieses Kapitel mit einem Exkurs in die Welt der jQuerySelektoren, mit denen Sie beliebige Elemente auf der Seite auswählen können, und zeigen Ihnen, wie Sie die CSS-Eigenschaften dieser Elemente via jQuery frei anpassen. Kapitel 3: Animieren, Scrollen und Skalieren jQuery glänzt in Sachen Animation: egal, ob Sie ein Menü elegant ins Sichtfeld gleiten lassen wollen oder ein Dialog über den Bildschirm huschen soll – jQuery macht's möglich! In diesem Kapitel erforschen wir die weitreichenden Animations-Features von jQuery und übertragen diese anhand einfacher Interface-Komponenten in die Praxis. Desweiteren werfen wir einen kurzen Blick auf Scroll- und Skalierungsfunktionen. Vorwort 7 Kapitel 4: Bilder und Slideshows Nachdem wir uns mit den Grundlagen von jQuery vertraut gemacht haben, können wir uns nun an den Aufbau von zwei der beliebtesten jQuery-Widgets machen: Bildergalerien und Slideshows. Sie lernen, wie Sie eine Lightbox, scrollende Miniaturen-Übersichten und überblendbare Bildergalerien gestalten, sowie ein Fotoalbum im iPhoto-Stil. Kapitel 5: Menüs, Tabs, Tooltips und Panels Da Sie nun in der Lage sind, coole Widgets für die Benutzeroberfläche zu gestalten, gehen wir einen Schritt weiter zu fortschrittlicheren Kontrollelementen: Drop-downMenüs, Accordions, Interfaces mit Tabs, Tooltips und verschiedene Arten von Inhaltsbereichen. Unsere Websites verwandeln sich zunehmend vom Broschürenstil der 1990er zu den Rich Internet Applications des 21sten Jahrhunderts! Kapitel 6: Struktur, Ajax und Interaktivität Darauf haben Sie alle gewartet: Ajax! Um Applikationen im echten Desktop-Stil ohne störende Unterbrechungen durch Seitenaktualisierungen zu erstellen, benötigen Sie einen ausgeklügelten Weg, um Daten vom und zum Server zu bewegen. Und diesen Weg beschreibt Ajax. jQuery beinhaltet zahllose Methoden zur Behandlung von AjaxAnfragen in einer simplen, Browser-übergreifenden Art, die Ihnen ein Lächeln aufs Gesicht zaubern wird. Damit wird unser Code natürlich auch immer umfangreicher, sodass es an der Zeit ist, über die besten Vorgehensweisen zur Strukturierung und Organisation nachzudenken. Kapitel 7: Formulare, Kontrollelemente und Dialoge Formulare sind – zum Verdruss vieler Entwickler – die Grundsteine einer jeden WebApplikation. Deshalb verraten wir Ihnen in diesem Kapitel, was uns jQuery in Sachen Vereinfachung des Formular-Scripting zu bieten hat. Sie lernen, wie Sie Formulare blitzschnell validieren, dem Anwender Unterstützung anbieten und Elemente wie Checkboxen, Radio Buttons oder Auswahllisten einsetzen. Dann werfen wir einen Blick auf einige unkonventionelle Wege der Interaktion: Datumswähler, Schieberegler sowie Drag and Drop. Abgerundet wird dieses Kapitel von neuen Design-Ansätzen für modale Dialoge und nicht-modale Benachrichtigungs-Stile. Was für ein Kapitel! Kapitel 8: Listen, Baumstrukturen und Tabellen Egal, wie sehr sich Ihre Applikation an »Web 2.0« orientiert – oftmals werden Sie auf klassische Elemente wie simple Listen, einfache Baumstrukturen und die in der Vergangenheit reichlich missbrauchten Tabellen zurückgreifen. Dieses Kapitel beweist Ihnen, dass jQuery selbst die langweiligste Aufgabe zu einem spaßigen Unterfangen machen kann. Darüber hinaus erfahren Sie, wie Sie Listen dynamisch sortierbar machen und Tabellen in hochfunktionale Datenraster konvertieren können. 8 Vorwort Kapitel 9: Plugins, Themes und fortgeschrittene Techniken jQuery bietet noch viel mehr als nur coole DOM-Manipulation, einfache Ajax-Anfragen und ansprechende UI-Komponenten. Es verfügt über fortgeschrittene Funktionen, die sich speziell an die Ninjas unter den Entwicklern wenden: eine fantastische PluginArchitektur, einen flexiblen und erweiterbaren Kern, frei anpassbare Ereignisse und vieles mehr. Im letzten Kapitel behandeln wir die Themes von jQuery UI und verraten Ihnen, wie Sie Ihre eigenen Plugins erstellen und diese grafisch an Ihre Vorstellungen anpassen. Am Ende werfen wir noch einen Blick auf das brandneue jQuery-MobileFramework, mit dem Sie Ihre Ninja-Fähigkeiten auch auf mobile Geräte bringen können. Anhang A: Referenzmaterial jQuery setzt auf Flexibilität und bietet viele Optionen zur Verwendung in einem breiten Spektrum von Applikationen. Egal ob es sich um die Verwendung von Ajax, die Sicherstellung der Browser-Kompatibilität oder das Handling von Ereignissen handelt – jQuery bietet die nötigen Funktionen, um auf nahezu alle denkbaren Anwendungsfälle einzugehen. Anhang B: JavaScript-Leckerbissen Wir wissen alle, dass bei jQuery reines JavaScript unter der Haube steckt. Deshalb bekommen Sie hier einen Crashkurs in Sachen JavaScript. Die erworbenen Grundkenntnisse helfen Ihnen dabei, die Funktionsweise von jQuery besser nachvollziehen zu können. Anhang C: Plugin-Helfer jQuery bietet eine Vielzahl von Funktionen und Helfern, die Ihnen beim Entwickeln eigener Plugins helfen. Im letzten Anhang werfen wir deshalb einen Blick auf praktische Plugin-Helfer wie den jQuery-Stapel und Tools zum Komprimieren Ihrer Dateien. Die Buch-Website Unter http://www.buch.cd finden Sie die Website zum Buch. Diese enthält das CodeArchiv. Während Sie sich durch dieses Buch arbeiten, stoßen Sie auf einige Referenzen zum Code-Archiv. In diesem herunterladbaren ZIP finden Sie jede Zeile Code, die in diesem Buch abgedruckt ist. Wenn Sie also schnell mal einen Code ausprobieren und sich die Zeit zum Eintippen sparen möchten, laden Sie einfach die Archivdatei herunter. Vorwort 9 Konventionen dieses Buchs Auf den Buchseiten werden Sie auf einige unterschiedlich formatierte Textpassagen stoßen. Die Formatierung dient zur Unterscheidung verschiedener Informationsarten: Beispiel-Code Code wird in einer Schriftart mit fester Zeichenbreite dargestellt. Beispiel: <h1>Ein perfekter Sommertag </h1> <p>Es war ein schöner Tag für einen Spaziergang im Park. Die Vögel sangen und die Kinder waren noch in der Schule.</p> Wenn sich der Code im Archiv des Buchs befindet, wird der Dateiname an oberster Stelle angegeben: example.css .footer { background-color: #CCC; border-top: 1px solid #333; } Wenn nur ein Teil der Datei wiedergegeben wird, indizieren wir dies mit dem Wort Auszug: example.css (Auszug) border-top: 1px solid #333; Wenn einem bestehenden Beispiel neuer Code hinzugefügt wird, erscheint der neue Code fettgedruckt: function animate() { new_variable = "Hallo"; } Wo bereits existierender Code erforderlich ist, sorgen drei Punkte als Auslassungszeichen dafür, dass nicht jede Codezeile wiederholt werden muss: function animate() { … return new_variable; } Einige Codezeilen sind so lang, dass sie nicht auf die Seitenbreite dieses Buchs passen und aus Layoutgründen umgebrochen werden mussten. Ein ➥ indiziert so einen Zeilenumbruch, den Sie bei der Codeeingabe ignorieren sollten: URL.open("http://www.sitepoint.com/blogs/2007/05/28/user-style-she ➥ets-come-of-age/"); 10 Vorwort Tipps, Anmerkungen und Warnungen Hey, Du! Praktische Tipps helfen Ihnen weiter. Ähm – entschuldigen Sie bitte… Anmerkungen sind nützliche, aber nicht unbedingt erforderliche Zusatzinformationen, die mit dem eigentlichen Thema zusammenhängen. Stellen Sie sicher … … dass Sie sich diese wichtigen Hinweise zu Gemüte führen. Aufgepasst! Warnungen vor typischen Fallstricken und Stolpersteinen, die Ihnen das Entwickler-Leben schwer machen können. 11 Inhaltsverzeichnis 1 Sich in jQuery verlieben .............................................................................. 17 1.1 Was ist so gut an jQuery? ............................................................. 17 1.1.1 Browserübergreifende Kompatibilität ............................................ 18 1.1.2 CSS3-Selektoren ........................................................................... 18 1.1.3 Hilfreiche Utilities ......................................................................... 18 1.1.4 jQuery UI ....................................................................................... 19 1.2 Plugins ......................................................................................... 20 1.2.1 Das Markup sauber halten ............................................................ 21 1.2.2 Breite Akzeptanz ........................................................................... 22 1.3 Wo ist die Kehrseite der Medaille? ................................................ 22 1.4 jQuery herunterladen und einbinden ............................................ 23 1.4.1 jQuery herunterladen .................................................................... 23 1.4.2 Das Google Content Distribution Network (CDN) ............................ 24 1.4.3 Weitere CDN-Optionen .................................................................. 26 1.4.4 Nightlies und Github ..................................................................... 26 1.4.5 Unkomprimiert oder komprimiert? ................................................ 26 1.5 Die Anatomie eines jQuery-Scripts ............................................... 27 1.5.1 Das jQuery-Kürzel ......................................................................... 27 1.5.2 Ein jQuery-Statement analysieren ................................................. 28 1.6 DOM: Das Document Object Model ............................................... 29 2 Auswählen, Dekorieren und Verbessern ...................................................... 31 2.1 Sicherstellen, dass die Seite bereit ist .......................................... 31 2.2 Selektieren: Das Herz von jQuery .................................................. 32 2.2.1 Einfache Auswahl ......................................................................... 33 2.2.2 Die Auswahl eingrenzen ................................................................ 35 2.2.3 Unsere Auswahl checken .............................................................. 35 2.2.4 Filter ............................................................................................. 36 2.2.5 Mehrfachselektoren ...................................................................... 36 2.2.6 Werden Sie zum Selektions-Profi .................................................. 36 2.3 Dekorieren: CSS mit jQuery .......................................................... 37 2.3.1 CSS-Eigenschaften auslesen ......................................................... 37 2.3.2 CSS-Eigenschaften anwenden ....................................................... 38 2.3.3 Klassen ......................................................................................... 40 12 Inhaltsverzeichnis 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.5 2.5.1 2.5.2 Verbessern: Effekte mit jQuery ..................................................... 42 Elemente verbergen und aufdecken .............................................. 42 Elemente ein- und ausblenden ..................................................... 44 Progressive Anpassung ................................................................. 46 Neue Elemente hinzufügen ........................................................... 46 Vorhandene Elemente entfernen ................................................... 49 Inhalte modifizieren ...................................................................... 49 Grundlegende Animationen: Ein- und Ausblenden mit Flair ........... 50 Callback-Funktionen ..................................................................... 51 Ein paar Tricks .............................................................................. 52 Elemente beim Hovern akzentuieren ............................................. 52 Spoiler aufdecken ......................................................................... 54 3 Animieren, Scrollen und Skalieren .............................................................. 57 3.1 Animieren ..................................................................................... 57 3.1.1 CSS-Eigenschaften animieren ....................................................... 57 3.1.2 Farbanimationen ........................................................................... 59 3.1.3 Easing ........................................................................................... 60 3.1.4 Fortgeschrittenes Easing ............................................................... 61 3.1.5 Aufklappende Inhaltsbereiche ...................................................... 63 3.1.6 Die Animations-Warteschlange ..................................................... 65 3.1.7 Chaining: Aktionen aneinanderreihen ........................................... 66 3.1.8 Chaining pausieren ....................................................................... 66 3.1.9 Animierte Navigation .................................................................... 67 3.1.10 Animierte Navigation: Klappe, die Zweite! ..................................... 70 3.1.11 Die jQuery-UI-Bibliothek ................................................................ 71 3.1.12 Lassen Sie sich animieren! ............................................................ 73 3.2 Scrollen ........................................................................................ 73 3.2.1 Das Ereignis scroll ..................................................................... 73 3.2.2 Mitlaufende Navigationsleiste ...................................................... 74 3.2.3 Das Dokument scrollen ................................................................. 76 3.2.4 Benutzerdefinierte Scrollleisten .................................................... 78 3.3 Skalieren ...................................................................................... 79 3.3.1 Das Ereignis resize ..................................................................... 79 3.3.2 Skalierbare Elemente .................................................................... 81 4 Bilder und Slideshows ................................................................................ 89 4.1 Die Lightbox ................................................................................. 89 4.1.1 Die benutzerdefinierte Lightbox .................................................... 89 4.1.2 Troubleshooting mit console.log ................................................ 93 4.1.3 ColorBox: Ein Lightbox-Plugin ....................................................... 94 Inhaltsverzeichnis 4.2 4.3 4.3.1 4.3.2 4.3.3 13 Bilder mit Jcrop zuschneiden ........................................................ 97 Slideshows ................................................................................. 100 Slideshows mit Cross-Fading ...................................................... 100 Scrollende Slideshows ................................................................ 112 Ein Slideshow-Widget im iPhoto-Stil ........................................... 118 5 Menüs, Tabs, Tooltips und Panels ............................................................. 125 5.1 Menüs ........................................................................................ 125 5.1.1 Expandierende Menüs ................................................................ 125 5.1.2 Indikatoren für offene/geschlossene Menüs ............................... 130 5.1.3 Menü per Hover aus- und einklappen .......................................... 131 5.1.4 Drop-down-Menüs ...................................................................... 132 5.2 Accordion-Menüs ....................................................................... 135 5.2.1 Ein einfaches Accordion .............................................................. 135 5.2.2 Accordions mit mehreren Ebenen ................................................ 139 5.2.3 Accordion-Menüs mit jQuery UI ................................................... 140 5.3 Tabs ........................................................................................... 141 5.3.1 Einfache Tabs ............................................................................. 141 5.3.2 Tabs mit jQuery UI ....................................................................... 143 5.4 Panels und Panes ....................................................................... 146 5.4.1 Aufklappbares Login-Formular .................................................... 146 5.4.2 Ein animiertes Overlay ................................................................ 147 5.5 Tooltips ...................................................................................... 150 5.5.1 Einfache Tooltips ........................................................................ 150 5.5.2 Fortgeschrittene Tooltips und Dialoge ......................................... 153 6 Struktur, Ajax und Interaktivität ................................................................ 159 6.1 Ideale Vorgehensweisen bei der Strukturierung ......................... 159 6.1.1 Sauberes jQuery ......................................................................... 159 6.1.2 Client-seitiges Templating ........................................................... 164 6.1.3 Browser Sniffing (… ist ganz böse!) ............................................. 167 6.2 Ajax Crash-Kurs .......................................................................... 168 6.2.1 Was ist Ajax? ............................................................................... 168 6.2.2 Remote-HTML laden .................................................................... 169 6.2.3 Hyperlinks erweitern mit Hijax ..................................................... 169 6.2.4 HTML mit Selektoren herauspicken ............................................. 171 6.2.5 Fortgeschrittene Anwendung von load ....................................... 172 6.2.6 An die Zukunft denken: on und off ............................................. 172 6.2.7 Daten auslesen mit $.getJSON ................................................... 174 6.2.8 Twitter-Suche auf Client-Seite ..................................................... 175 14 Inhaltsverzeichnis 6.2.9 6.2.10 6.2.11 6.2.12 6.2.13 6.3 6.3.1 6.3.2 Das jQuery-Ajax-Arbeitspferd ...................................................... 176 Globale Ajax-Einstellungen ......................................................... 177 Externe Scripts mit $.getScript laden ...................................... 177 GET- und POST-Anfragen .............................................................. 178 jQuery-Ajax-Ereignisse ................................................................ 179 Interaktivität mit Ajax ................................................................. 180 Eine Ajax-Fotogalerie .................................................................. 181 Image Tagging ............................................................................. 192 7 Formulare, Kontrollelemente und Dialoge ................................................. 199 7.1 Formulare ................................................................................... 199 7.1.1 Einfache Formularvalidierung ...................................................... 200 7.1.2 Prüfung mit dem Validation-Plugin .............................................. 204 7.1.3 Indikator für Maximallänge ......................................................... 206 7.1.4 Feldbezeichnungen im Eingabefeld ............................................. 208 7.1.5 Alle Checkboxen prüfen .............................................................. 209 7.1.6 Inline-Bearbeitung ...................................................................... 210 7.1.7 Automatisches Vervollständigen ................................................. 215 7.1.8 Sterne-Bewertung ....................................................................... 217 7.2 Kontrollelemente ........................................................................ 222 7.2.1 Buttons ....................................................................................... 223 7.2.2 Datumswähler ............................................................................. 224 7.2.3 Schieberegler .............................................................................. 226 7.2.4 Drag and Drop ............................................................................. 229 7.2.5 jQuery UI sortable ................................................................... 235 7.2.6 Fortschrittsbalken ....................................................................... 237 7.3 Dialoge und Meldungen ............................................................. 238 7.3.1 Einfacher modaler Dialog ............................................................ 239 7.3.2 jQuery-UI-Dialog .......................................................................... 241 7.3.3 Benachrichtigungen im Growl-Stil ............................................... 244 7.3.4 Videospiel-Retro: 1-up! ............................................................... 247 8 Listen, Baumstrukturen und Tabellen ........................................................ 251 8.1 Listen ......................................................................................... 251 8.1.1 Mehrfachauswahl per jQuery UI .................................................. 251 8.1.2 Listen sortieren ........................................................................... 256 8.2 Listen in Auswahlfeldern manipulieren ....................................... 258 8.3 Baumstrukturen ......................................................................... 262 8.3.1 Expandierbarer Kategorien-Baum ................................................ 262 8.3.2 Ereignis-Delegierung ................................................................... 265 Inhaltsverzeichnis 8.4 8.4.1 8.4.2 8.4.3 8.4.4 15 Tabellen ..................................................................................... 267 Fixe Kopfzeilen ............................................................................ 267 Sich wiederholende Kopfzeilen ................................................... 270 Datenraster ................................................................................. 272 Zeilen mit Checkboxen auswählen .............................................. 280 9 Plugins, Themes und fortgeschrittene Techniken ...................................... 283 9.1 Plugins ....................................................................................... 283 9.1.1 Ein Plugin erzeugen .................................................................... 283 9.2 Fortgeschrittene Techniken ........................................................ 290 9.2.1 jQuery erweitern .......................................................................... 290 9.2.2 Ereignisse ................................................................................... 300 9.3 jQuery-Tricks für echte Ninjas ..................................................... 308 9.3.1 Konflikte vermeiden .................................................................... 308 9.3.2 Animationen in Warteschlangen ................................................. 309 9.3.3 JavaScript-Objekte wie jQuery-Objekte behandeln ...................... 311 9.4 Theme Rolling ............................................................................ 312 9.4.1 Galerie-Themes verwenden ......................................................... 312 9.4.2 Eigene Themes gestalten ............................................................ 313 9.4.3 Themes auf Ihre Komponenten anwenden .................................. 314 9.5 jQuery macht mobil .................................................................... 316 9.5.1 Spielen Sie Ihren Trumpf aus! ..................................................... 317 A Referenzmaterial ...................................................................................... 329 A.1 $.ajax-Optionen ........................................................................ 329 A.1.1 Flags ........................................................................................... 329 A.1.2 Einstellungen .............................................................................. 330 A.1.3 Callbacks und Funktionen ........................................................... 332 A.2 $.support-Optionen .................................................................. 333 A.3 Ereignisse .................................................................................. 336 A.3.1 Ereignis-Eigenschaften ................................................................ 336 A.3.2 Ereignis-Methoden ...................................................................... 336 A.3.3 DIY-Ereignis-Objekte ................................................................... 337 B JavaScript-Leckerbissen ............................................................................ 339 B.1 JavaScript – eine zwanglose Sprache ......................................... 339 B.2 Gleichheits-Operatoren .............................................................. 340 B.3 Truthiness und Falsiness ............................................................ 341 B.4 jQuery demaskieren ................................................................... 342 16 C Inhaltsverzeichnis Plugin-Helfer ............................................................................................. 343 C.1 Selektor und Kontext .................................................................. 343 C.2 Der jQuery-Stapel ....................................................................... 344 C.3 Komprimierung .......................................................................... 345 Stichwortverzeichnis ................................................................................ 347 17 1 Sich in jQuery verlieben Sie beherrschen semantisches HTML und können es mit meisterhaftem CSS unterstützen, um Ihre Gestaltungsideen in hinreißende Webseiten umzusetzen, die deren Besucher begeistern. Wie Sie jedoch beim Gestalten des nächsten Facebook- oder TwitterBeitrags merken, kommen Sie aber heutzutage selbst mit inspirierendem Design und makellosem HTML nicht weit. Welches Teil fehlt uns also noch im Front-End-Puzzle? Es ist JavaScript. Diese Programmiersprache galt so viele Jahre als schwarzes Schaf der Webentwickler-Familie. Mit JavaScript fügen Sie Ihrer Seite komplexes Verhalten, ausgeklügelte Interaktionen und besonderes Flair hinzu. Um den schlafenden Riesen namens JavaScript zu wecken, müssen Sie sich nur reinknien und die nächsten Jahre mit dem Erlernen der Programmiersprache zubringen: Funktionen, Klassen, Designmuster, Protoypen, Closures … Oder Sie greifen auf ein Geheimnis zu, das Sie vermutlich mit einigen der größten Namen im Web teilen – wie Amazon, Google, Microsoft, Mozilla, Twitter und WordPress: Benutzen Sie jQuery! Weltweit verwenden Gestalter und Entwickler die jQueryBibliothek, um rasch und elegant ihre interaktiven Ideen zu implementieren und das Puzzle der Webentwicklung zu vervollständigen. In diesem Kapitel sehen wir uns an, was die Qualität von jQuery ausmacht und wie es HTML und CSS auf natürlichere Weise ergänzt als unser alter Freund und bitterer Widersacher: das gute alte JavaScript. Wir sehen uns auch an, was nötig ist, um jQuery aufzurufen und zum Laufen zu bringen, um damit auf unseren aktuellen Seiten zu arbeiten. 1.1 Was ist so gut an jQuery? Sie haben sicher schon gehört, dass Sie mit jQuery einfach mit dem Document Object Model (DOM) spielen, Effekte hinzufügen und Ajax-Anfragen ausführen können. Aber was ist daran besser als etwa eine eigene Bibliothek zu schreiben oder eine der anderen existierenden (ebenfalls ausgezeichneten) JavaScript-Bibliotheken zu nutzen? Zuallererst – haben wir schon erwähnt, dass Sie durch jQuery einfach mit dem DOM spielen, Effekte hinzufügen und Ajax-Requests ausführen können? Es ist tatsächlich so einfach, dass es ein absoluter Spaß ist: Sie werden sich oft schwer zurückhalten müssen, um von manchen Verrücktheiten, die Sie erfunden haben, wieder Abstand zu nehmen und sich auf Ihren guten Ruf als Webdesigner zu besinnen (ach, was könnten wir für coole Sachen kreieren, wenn da nicht der gute Geschmack wäre!). Doch müssen Sie eine Vielzahl an bedeutenden Faktoren bedenken, wenn Sie Ihre kostbare Zeit in das Erlernen von JavaScript investieren. 18 1.1.1 Kapitel 1: Sich in jQuery verlieben Browserübergreifende Kompatibilität Abgesehen davon, dass es Spaß macht, jQuery zu verwenden, zählt es zu den größten Vorzügen von jQuery, dass es eine Menge vertrackter browserübergreifender Belange für Sie regelt. Jeder, der schon ernsthafte Java-Scripte verfasst hat, wird bestätigen, dass einen die browserübergreifenden Inkonsequenzen in den Wahnsinn treiben. Beispielsweise zerhaut es ein Design, das in Firefox und Internet Explorer 8 perfekt dargestellt wird, im Internet Explorer 7. Oder eine Interface-Komponente, die tagelange Arbeit kostete, funktioniert in allen bedeutenden Browsern – bis auf Opera unter Linux. Und der Kunde pflegt gerade Opera unter Linux zu nutzen. Angelegenheiten wie diese sind nie einfach aufzuspüren und noch schwerer komplett zu beheben. Selbst wenn browserübergreifende Probleme einfach zu handhaben sind, erfordern sie eine mentale Datenbank an Wissen. Nur auf dieses Wissen können Sie hoffen, wenn um 23:00 Uhr am Tag vor der Veröffentlichung eines großen Projekts ein verquerer Padding-Bug auf einem Browser auftritt, den Sie zu testen vergessen haben! Das jQuery-Team ist sich über die browserübergreifenden Probleme genau im Klaren und weiß überdies, warum sie passieren. Dieses Wissen wurde in der Bibliothek niedergeschrieben – sodass jQuery für Sie die Vorsichtsmaßnahmen ergreift. Der Großteil des Codes, den Sie verfassen, wird perfekt auf allen bedeutenden Browsern laufen – inklusive dem allen hinlänglich bekannten Sorgenkind namens Internet Explorer 6. Wir sind uns fast sicher, dass Ihre Firma fortschrittlich genug ist, um Ihnen den Support für IE 6 nicht abzuverlangen, doch es dürfte Ihnen ein Gefühl von Sicherheit geben, dass jQuery Ihnen auch hier den Rücken freihält. Allein dieses Feature wird die durchschnittliche Menge von Entwicklern für den Rest ihres Lebens von Kopfschmerzen befreien. Natürlich sollten Sie immer danach streben, mit den neuesten Entwicklungen und besten Methoden Ihres Gewerbes Schritt zu halten, doch wenn Sie die Jagd nach obskuren Browserfehlern jQuery überlassen können (das seine Trefferquote mit jeder Version erhöht), gewinnen Sie mehr Zeit, um Ihre Ideen umzusetzen. 1.1.2 CSS3-Selektoren Die heutigen Technologien browserübergreifend konform zu schalten, ist schön und gut, doch jQuery unterstützt auch die neue CSS3-Spezifikation für Selektoren. Ja, sogar im Internet Explorer 6! Sie können sich für die Zukunft einen Vorsprung sichern, indem Sie die CSS3-Selektoren ab sofort erlernen und in Ihren Produktionscode einbinden. Das Auswählen und Verändern von Elementen gehört zu den Quellen der Kraft von jQuery und mit CSS3-Selektoren haben Sie noch mehr Spielraum für Ihre Arbeit. 1.1.3 Hilfreiche Utilities Zum Umfang von jQuery zählt auch eine Auswahl von Utility-Funktionen, die allgemeine Funktionen implementieren und beim Verfassen von jQuery-Code hilfreich sind (oder schlicht bei JavaScript fehlen): Strings zu trimmen, um Objekte auf einfache Weise zu präzisieren, und vieles mehr. Diese Funktionen sind per se schon praktisch, fördern 1.1 Was ist so gut an jQuery? 19 aber auch die nahtlose Integration von jQuery in JavaScript in Form von Codes, die leichter zu schreiben und zu warten sind. Ein erwähnenswertes Utility namens jQuery.support (oder $.support) testet, ob bestimmte Funktionen auf dem aktuellen Browser des Nutzers verfügbar sind. Bislang betrieben viele Entwickler das verpönte Browser-Sniffing, um den vom Anwender verwendeten Browser nebst Versionsnummer herauszufinden. Diese Praxis hat sich schon immer als unbefriedigend und fehleranfällig erwiesen. Wenn Sie das support-Utility von jQuery nutzen, können Sie testen, ob dem Anwender ein bestimmtes Feature zur Verfügung steht, und einfach Applikationen erstellen, die abwärtskompatibel auf älteren Browsern laufen – oder auch auf solchen, die nicht standardkonform sind. Zwar könnten Sie etwas mehr Leistung und ein paar besondere Features durch MicroBibliotheken gewinnen, die wie Modernizr1 mehr auf die Entdeckung unterstützter Features ausgerichtet sind, doch ein echter Ninja nutzt lieber die zur Verfügung stehenden Komponenten. Es zeugt von schlechtem Stil, eine Micro-Bibliothek hinzuzufügen, wenn es nicht unbedingt erforderlich ist. 1.1.4 jQuery UI Mit jQuery wurden bereits einige eindrucksvolle Widgets und Effekte erzeugt, von denen manche so hilfreich waren, dass sie ihren Weg in die Kern-Bibliothek von jQuery fanden. Man denke nur an Plugins wie Dimensions von Paul Bakaus und Brandon Aaron oder an Unwrap von Ben Alman. Wenn Sie jQuery und die jQuery-Community besser kennenlernen, werden Sie auf weitere Beispiele stoßen. Dennoch hat das Team von jQuery weise entschieden, übergeordnete Konstruktionen aus dem konzentrierten Grundbestand der Bibliothek auszugrenzen und sie in eine übersichtliche Bibliothek zu packen, die auf jQuery aufsetzt. Die erste Bibliothek dieses Typs heißt jQuery UI und die jüngste (die wir uns in Kapitel 9 näher ansehen) jQuery Mobile. jQuery UI beinhaltet eine Menagerie hilfreicher Effekte, ausgefeilter Widgets und ansprechender Themes. Einige dieser Funktionen zeigt Bild 1.1. Accordions, Schieberegler, Dialogfenster, Datumswähler und noch mehr – alles einsatzbereit! Sie würden eine Menge Zeit damit zubringen, solche Elemente in jQuery selbst zu programmieren. Die jQuery-UI-Kontrollelemente sind frei konfigurierbar und ausgeklügelt genug, dass Sie Ihre wertvolle Zeit auf die wichtigen Dinge konzentrieren können. Konzentrieren Sie sich lieber auf die Inhalte und Funktionen Ihres Projekts, statt Stunden zu investieren, einen selbst gebauten Datumswähler auf einem halben Dutzend Browsern zu testen! 1 http://www.modernizr.com/ 20 Kapitel 1: Sich in jQuery verlieben Bild 1.1: Einige jQuery-UI-Widgets Im Verlauf des Buchs werden wir Ihnen jQuery UI ausführlich vorstellen, dabei sogar einige der verfügbaren flippigen Themes integrieren und Ihnen verraten, wie Sie eigene Themes mithilfe des UI ThemeRoller gestalten. 1.2 Plugins Das Team von jQuery hat große Sorgfalt darauf verwendet, die jQuery-Bibliothek erweiterbar anzulegen. Indem nur ein Block von grundlegenden Features integriert ist, doch ein Framework zur Erweiterung der Bibliothek bereitsteht, erstellen Sie auf einfache Weise Plugins, die Sie in all Ihren jQuery-Projekten immer wieder verwenden oder mit anderen Entwicklern teilen können. Eine Menge weit verbreiteter Funktionen wurde aus dem Kern der jQuery-Bibliothek ausgelagert und ins Reich der Plugins verbannt. Keine Sorge, hier handelt es sich um ein Leistungsmerkmal und nicht um eine Schwachstelle. Jede zusätzlich benötigte Funktion kann einfach Seite für Seite eingebunden werden, um Bandbreite und Code-Menge minimal zu halten. Glücklicherweise haben viele Entwickler den Vorteil der potenziellen Erweiterung genutzt, sodass bereits hunderte ausgezeichneter Plugins über das Plugin Repository von jQuery heruntergeladen werden können, während ständig neue hinzukommen. Einen Ausschnitt sehen Sie in Bild 1.2. 1.2 Plugins 21 Bild 1.2: Plugin Repository von jQuery Immer wenn Sie vor einer Aufgabe oder vor einem Problem stehen, lohnt es sich, nach einem Plugin Ausschau zu halten, das Ihren Bedürfnissen entsprechen könnte. Denn fast jede Funktionalität, die Sie benötigen, liegt inzwischen als Plugin vor. Selbst wenn sich herausstellt, dass Sie noch selbst etwas Hand anlegen müssen, ist das Plugin Repository oft der beste Weg zu einer schnellen und unkomplizierten Lösung. Wo sind meine Plugins? Zum Zeitpunkt des Erscheinens dieses Buchs befindet sich das jQuery Plugin Repository2 noch in der Entwicklungsphase. Ein Platzhalter auf der Seite enthält folgenden Warnhinweis: »Wir bemühen uns derzeit um eine höhere Qualität und um einen spamfreien Auftritt auf der Plugin-Seite. Ein schwerwiegender Fehler unsererseits erforderte es, die derzeitige Seite vor dem Ersatz durch die neue herunterzufahren.« Die ganze Hintergrundgeschichte über den Wechsel sowie Informationen über den Stand der Entwicklung der Seite und Hinweise zum Auffinden diverser Plugins finden Sie im Blog von jQuery3. Die Fortschritte bei der Entwicklung der Plugin-Seite können Sie auf GitHub verfolgen4. 1.2.1 Das Markup sauber halten Die Trennung von Script-Verhalten und Präsentation der Seite ist gängige Praxis in der Webentwickler-Szene, wenngleich damit die schwierigen Herausforderungen zutage treten. Für jQuery ist es ein Klacks, Ihr Markup komplett vom Inline-Scripting zu befreien dank seiner Fähigkeit, Elemente auf Seiten leicht auszuwählen und sie mit CSSStilen zu versehen. jQuery besitzt keinen Mechanismus, um Inline-Code hinzuzufügen. Diese strikte Trennung von Belangen führt zu einem schlanken, sauberen Code, der besser zu warten ist. Und jQuery beschränkt sich nicht darauf, sich in den vorhandenen HTML-Code einer Seite einzumischen, sondern kann mittels einer Sammlung von praktischen Funktionen neue Seitenelemente und Dokumentfragmente hinzufügen. Überall auf der Seite können 2 3 4 http://plugins.jquery.com/ http://blog.jquery.com/2011/12/08/what-is-happening-to-the-jquery-plugins-site/ https://github.com/jquery/plugins.jquery.com 22 Kapitel 1: Sich in jQuery verlieben neue HTML-Blöcke eingefügt, angehängt und vorangestellt werden. Sie können sogar bestehende Elemente ersetzen, verschieben oder klonen. Alles Funktionen, die Ihnen behilflich sind, Ihre Seiten nach und nach zu verbessern, und jenen Nutzern das volle Programm zu bieten, deren Browser es gestatten, während alle anderen mit einem akzeptablen Grundgerüst arbeiten können. 1.2.2 Breite Akzeptanz Wenn Sie Nutzerstudien auf Google Trends verfolgen5, werden Sie den rasanten Aufstieg von jQuery zum ruhmreichen Superstar miterleben. Sie können sich jederzeit auch die Diagramme bei BuiltWith ansehen6. Mit dieser Popularität der Bibliothek geht ein vermehrtes Angebot von aktiven Codes und vielen interessanten Goodies von Drittanbietern einher. Zahllose namhafte Firmen im Web springen auf den jQuery-Zug auf: IBM, Netflix, Nokia, Wikipedia und sogar Google (das die jQuery-Bibliothek nicht nur nutzt, sondern auch hostet) sowie Microsoft, das jQuery nun in sein MVC Framework und auch in seine IDE (Integrated Development Environment) aufgenommen hat, bis hin zu Visual Studio. Mit einer derartig breiten Palette von großen Firmen an der Seite kann man jede Wette eingehen, dass jQuery noch lange seinen Platz behauptet, sodass es sich lohnt, Zeit und Mühe ins Erlernen zu investieren. Tatsächlich finden Sie jQuery auf nahezu 40 % Prozent der Seiten, die JavaScript nutzen. Damit werden sich einige Türen für Sie öffnen, wenn Sie Ihre jQuery-Kenntnisse vertiefen. Mit der Popularität von jQuery wuchs eine große und freigiebige Community heran, die erstaunlich hilfreich ist. Ganz egal, wie es um Ihre Kenntnisse bestellt ist – Sie werden immer andere Entwickler finden, die geduldig genug sind, um Ihnen beizustehen und bei der Lösung von Problemen zu helfen. Dieser tragende gemeinsame Gedanke verbreitete sich weiter im Internet und ließ eine wahre Enzyklopädie von hochwertigen Tutorials, Blogeinträgen und Dokumentationen entstehen. 1.3 Wo ist die Kehrseite der Medaille? Es gibt so gut wie keine Kehrseite! Das Hauptargument gegen den Einsatz einer JavaScript-Bibliothek bestand immer in der Größe und Geschwindigkeit: Vielfach wird behauptet, dass beim Nutzen einer Bibliothek zu große Datenmengen beim Download von Seiten anfallen, während andere beklagen, dass Bibliotheken verglichen mit einem schlankeren Standardcode eine schlechte Performance liefern. Obwohl es diese Argumente zu bedenken gilt, sind sie nicht nachhaltig von Bedeutung. In Hinblick auf die Größe erweist sich jQuery als Leichtgewicht. Die Kernbibliothek von jQuery hinterlässt mit ungefähr 19 kB und damit weniger als einem durchschnittlich großen JPG-Bild nur einen winzigen Fußabdruck im Datenstrom. Alle Extras, die Sie für 5 6 http://www.google.com/trends http://trends.builtwith.com/javascript/jQuery 1.4 jQuery herunterladen und einbinden 23 Ihr Projekt benötigen (wie Plugins oder Komponenten der jQuery-UI-Bibliothek), können Sie modular hinzufügen und dabei getrost die Bandbreite-Kalorien mitzählen. Geschwindigkeit wie auch Größe verlieren ihre Brisanz angesichts dessen, dass sich die Hardware-Spezifikationen von Computern ständig verbessern und die JavaScriptEngines immer rascher wachsen. Das klingt keineswegs danach, dass jQuery langsam ist, vielmehr scheint das Team von jQuery besessen von dem Gedanken an Geschwindigkeit zu sein! Jede neue Version erweist sich als schneller gegenüber der vorhergehenden, sodass die vermeintlichen Vorzüge der Verwendung eigener Java-Scripte mit jedem Tag schrumpfen. Im Wettkampf der JavaScript-Bibliotheken (und davon gibt es mehr als eine Hand voll) schneidet jQuery bei den wesentlichen Funktionen seiner Klasse am besten ab: beim Manipulieren der DOM, beim Hinzufügen von Effekten und beim Senden von AjaxAnfragen. Viele Bibliotheken bieten nach wie vor eine exzellente Qualität, und so lohnt es sich immer, nach Alternativen zu suchen – doch wir legen Ihnen ausdrücklich jQuery ans Herz! Genug geredet: Nun ist es an der Zeit, mithilfe von jQuery Nägel mit Köpfen zu machen! 1.4 jQuery herunterladen und einbinden Bevor Sie sich in jQuery verlieben können (oder zumindest seinen Wert schätzen lernen), benötigen Sie die neueste Version des Codes, um ihn Ihren Seiten hinzuzufügen. Sie können dies auf verschiedenen Wegen mit jeweils zusätzlichen Optionen bewerkstelligen. Für welche Lösung Sie sich auch entscheiden, Sie müssen jQuery in Ihre HTML-Seite einbinden, so wie es auch bei anderen JavaScript-Quelldateien üblich ist. Alles nur JavaScript Vergessen Sie niemals, dass jQuery nur aus JavaScript besteht! Es mag vordergründig anders aussehen und anders agieren, doch unter der Haube steckt reines JavaScript. Konsequenterweise kann jQuery nichts bewerkstelligen, was das gute alte JavaScript selbst nicht vermag. Das bedeutet, dass wir die Bibliothek auf dieselbe Weise in unsere Seiten einbinden wie jede andere JavaScriptDatei. 1.4.1 jQuery herunterladen Die meisten Entwickler laden die jQuery-Bibliothek und damit auch die neueste Version von der jQuery-Webseite herunter7. Per Klick auf den großen, glänzenden DownloadButton erhalten Sie den neuesten Code aus jQuerys eigenem Code-Archiv. Alternativ besuchen Sie die Download-Seite, um sich die jüngste Version von jQuery Content Delivery Network (CDN), Googles CDN oder auch CDN von Microsoft in der gebotenen Kompressionsstufe zu holen. Ein CDN besteht aus einem Netzwerk von Servern, die 7 http://jquery.com/ 24 Kapitel 1: Sich in jQuery verlieben darauf spezialisiert sind, dem Nutzer die Inhalte möglichst rasch und skalierbar anzubieten. Diese Server sind oft auf verschiedene geografische Orte verteilt, damit jede Anfrage vom nächststehenden Server im Netzwerk beantwortet werden kann. Klicken Sie auf den Link zum Download und speichern Sie die JavaScript-Datei in einem neuen zugriffsbereiten Ordner. Er muss sich dort befinden, wo Ihre HTML-Dateien auf ihn zugreifen können: üblicherweise in einem scripts- oder javascript-Dateiverzeichnis unter dem Root-Verzeichnis Ihrer Webseite. Im folgenden Beispiel gehen wir ganz einfach vor und speichern die Bibliothek im selben Verzeichnis wie die HTML-Datei. Damit alles funktioniert, müssen wir unsere HTML-Datei anweisen, die jQuery-Bibliothek einzubinden. Dies wird mit einem <script>–Element in unserem HTML-Dokument bewerkstelligt. Das <head>-Element einer ganz simplen HTML-Datei mit integriertem jQuery würde etwa folgendermaßen aussehen: <head> <title>Hello jQuery world!</title> <script type="text/javascript" src="jquery-1.7-min.js"></script> <script type="text/javascript" src="script.js"></script> </head> Das erste Tag auf der Seite lädt die jQuery-Bibliothek und das zweite bezieht sich auf eine script.js-Datei, in der wir unseren eigenen jQuery-Code durchführen. Und das war schon alles: jQuery ist zum Einsatz bereit! Aber lassen Sie uns hier innehalten. Während wir uns damit befassen, die jQuery-Bibliothek in unseren HTML-Code einzubinden, sollte uns bewusst sein, dass wir unsere Datei nicht nur im head des Dokuments verankern können; tatsächlich erweist sich der head nach aktuellem Wissensstand nicht einmal als die geeignetste Stelle zum Einbinden von jQuery. Wenn sie abenteuerlustig sind, können Sie es auch direkt vor dem Schließen des body-Elements einbinden: </section> <script type="text/javascript" src="jquery-1.7-min.js"></script> <script type="text/javascript" src="script.js"></script> </body> </html> Nach wie vor lädt das erste Tag der Seite die jQuery-Bibliothek und das zweite verweist auf unsere script.js-Datei, doch diesmal werden unsere Dateien erst nach dem Content der Seite geladen (mehr dazu später). Wir erwähnten weiter oben bereits, dass es der gebräuchlichste Weg ist, jQuery herunterzuladen, doch Sie haben noch einige andere Möglichkeiten, die wir uns kurz ansehen sollten, bevor wir weitermachen. Wenn Sie lieber gleich mit jQuery spielen wollen, können Sie den folgenden Abschnitt übergehen. 1.4.2 Das Google Content Distribution Network (CDN) Eine alternative Methode, die jQuery-Bibliothek einzubinden, bietet Google CDN. Google hostet diverse gängige Open-Source-Bibliotheken auf seinem CDN, unter anderem auch jQuery (und jQuery UI, auf das wir in Kürze eingehen). Anstatt also die jQuery-Dateien auf dem eigenen Webserver zu hosten, wie wir oben vorgeführt haben, 1.4 jQuery herunterladen und einbinden 25 können Sie mit Google als Partner Ihre Bandbreite-Rechnung verringern. Sie profitieren von der Geschwindigkeit und Betriebssicherheit, die Googles ausgedehnte Infrastruktur aufweist, und erhalten überdies den Bonus, immer mit der neuesten Version von jQuery zu arbeiten. Ein anderer Vorteil von Google CDN besteht darin, dass viele Nutzer bereits jQuery von Google heruntergeladen haben, wenn sie andere Seiten besuchen. Folglich wird es beim Besuch Ihrer Seite aus dem Cache geladen (sofern die URL der JavaScript-Datei dieselbe ist), was zu signifikant schnelleren Ladezeiten führt. Auf dieselbe Weise können Sie auch die etwas klobigere jQuery-UI-Bibliothek einbinden, wodurch Google CDN durchaus attraktiv für Ihre neuen Projekte wird: Es hilft Ihnen dabei, Geld zu sparen und die Performance zu erhöhen, damit Ihr neues Projekt ein Riesenerfolg wird! Es gibt einige Möglichkeiten, jQuery über Google CDN einzubinden. Wir nutzen die einfachste (wenn auch etwas weniger flexible) Methode, die auf Pfaden basiert: <head> <title>Hello jQuery world!</title> <script type="text/javascript" src="http://ajax.googleapis.com/ ➥ajax/libs/jquery/1.7.0/jquery.min.js"></script> <script type="text/javascript" src="script.js"></script> </head> Dieses Beispiel mag unserem ursprünglichen sehr ähnlich sein, doch das script–Tag verweist nicht auf eine Kopie von jQuery, sondern auf einen Server von Google. Die neueste Version mit Google CDN beziehen Wenn Sie sich die URL genau ansehen, die auf die Google-Server verweist, werden Sie feststellen, dass die Version von jQuery durch eines der Pfadelemente spezifiziert ist (die 1.7.0 in unserem Beispiel). Möchten Sie indessen die neueste und umfangreichste Version nutzen, entfernen sie eine Zahl am Ende der Versions-Nummernfolge (z. B. 1.7), damit die neueste Ausgabe, die in der 1.7er-Serie verfügbar ist, abgerufen wird (1.7.1, 1.7.2 usw.). Sie können die Angabe auch komplett auf die erste Zahl beschränken (1), um von Google die neueste Version zu erhalten, selbst wenn jQuery 1.8 oder dessen Nachfolger veröffentlicht wird. Doch wählen Sie Ihre Vorgaben mit Bedacht, denn: je kürzer der String, desto kürzer ist auch der Verbleib im Cache. Wenn Sie immer nur die Anfangsnummern angeben, müssen zwar beim Erscheinen einer neuen jQuery-Version die CDN-URLs in Ihrer HTML-Datei nicht aktualisiert werden, doch Sie müssen prüfen, ob es Änderungen in der Bibliothek gibt, die Ihre bestehende Funktionalität betreffen könnten. Wenn Sie die etwas komplexere »Google Loader«-Methode zum Einbinden von Bibliotheken ausprobieren möchten, finden Sie viele Informationen dazu auf der GoogleCDN-Webseite8. 8 http://code.google.com/apis/ajaxlibs/documentation/ 26 1.4.3 Kapitel 1: Sich in jQuery verlieben Weitere CDN-Optionen Nicht nur Google möchte seinen Besuchern unter die Arme greifen, damit sie ihre Webseite genießen können. jQuery selbst hat ebenfalls erkannt, wie wertvoll es ist, eigene CDN-Optionen anzubieten9, und auch Microsoft ist mit von der Partie. Im Zuge seiner Verpflichtung gegenüber dem Open Web hostet Microsoft eine Version, auf die Sie verlinken können; auf der dazugehörigen Webseite finden Sie viele Details10. 1.4.4 Nightlies und Github Noch mehr erweiterte Optionen zum Erhalt von jQuery finden Sie auf der offiziellen »Downloading jQuery«-Dokumentationsseite11. Die erste Option bietet die Nightly Builds. Nightlies sind automatisiert erstellte Versionen der jQuery-Bibliothek, die den gesamten neuen Code enthalten, der im Tagesverlauf generiert oder abgeändert wurde. In jeder Nacht werden die allerneuesten Versionen zum Download bereitgestellt und können auf dieselbe Weise eingebunden werden wie die reguläre Bibliothek. Sollte Ihnen der allnächtliche Turnus noch immer zu sporadisch sein, können Sie die Github Repositories nutzen, um den topaktuellsten Quellcode zu beziehen. Github12 ist ein dezentrales Versionskontrollsystem, das vom jQuery-Team verwendet wird. Immer, wenn ein Entwickler in jQuery eine Änderung vornimmt, können Sie diese unverzüglich herunterladen. Bedenken Sie jedoch, dass sowohl die Nightly- wie auch die Github-Bibliotheken oft nicht getestet sind. Sie können (und werden) Fehler enthalten und unterliegen ständigen Veränderungen. Wenn Sie also nicht an der jQuery-Bibliothek als solcher arbeiten, greifen Sie lieber auf die vorgenannten, wesentlich sichereren Optionen zurück. 1.4.5 Unkomprimiert oder komprimiert? Wenn Sie sich intensiver auf der jQuery-Download-Seite umsehen, werden Sie vielleicht eine Reihe verschiedener Download-Formatoptionen entdecken: komprimiert (auch als minified bezeichnet) und unkomprimiert (auch development genannt). Gewöhnlich werden Sie die Version »minified« mit dem komprimierten jQuery-Quellcode für Ihren Produktionscode nutzen wollen: Hier wurden Leerzeichen und Zeilenumbrüche entfernt sowie diverse Namen gekürzt. Im Ergebnis erhalten Sie die gleiche jQuery-Bibliothek, doch ist sie in einer JavaScript-Datei enthalten, die viel kleiner als die ursprüngliche ist. Damit können Sie wunderbar Bandbreite-Kosten sparen und die Seitenaufrufe für Nutzer beschleunigen. Nachteilig hingegen wirkt sich die Kompression der Datei auf die Lesbarkeit aus. Wenn Sie sich die komprimierte jQuery-Datei in Ihrem Text-Editor anschauen (denn mal los!13), werden Sie feststellen, dass sie praktisch unles- 9 10 11 12 13 http://code.jquery.com http://asp.net/ajaxlibrary/cdn.ashx http://docs.jquery.com/Downloading_jQuery http://github.com/jquery/jquery http://code.jquery.com/jquery-1.7.0.min.js 1.5 Die Anatomie eines jQuery-Scripts 27 bar ist: Sie besteht aus einer einzigen Zeile, die nach verstümmeltem JavaScript aussieht. Die Lesbarkeit der Bibliothek ist meist inkonsequent, doch falls Sie sich dafür interessieren, wie jQuery aktuell funktioniert, finden Sie mit der unkomprimierten Entwicklerversion ein kommentiertes, lesbares und richtig schönes Beispiel von JavaScript vor. 1.5 Die Anatomie eines jQuery-Scripts Nachdem wir jQuery in unsere Webseite eingebunden haben, wollen wir uns ansehen, was unser Baby alles kann. Die Syntax von jQuery mag auf den ersten Blick ein wenig sonderbar wirken, doch sie ist recht überschaubar und, was besonders zählt, äußerst konsequent. Sobald Sie Ihre ersten Befehle verfasst haben, werden Sie Stil und Syntax derart im Kopf haben, dass Sie unbedingt weiterschreiben wollen! 1.5.1 Das jQuery-Kürzel Wenn Sie jQuery auf Ihrer Seite einbinden, erhalten Sie Zugang zu einer einzigen magischen Funktion, die (wie seltsam doch!) jQuery heißt. Sprechen wir nur über eine Funktion? Mit dieser einzigen Funktion liefert jQuery Hunderte von leistungsfähigen Tools, mit denen Sie Ihren Webseiten eine neue Dimension verleihen können. Weil diese eine Funktion das Portal zur gesamten jQuery-Bibliothek bildet, ist es höchst unwahrscheinlich, dass durch die Benennung der Funktionen Konflikte mit anderen Bibliotheken oder Ihrem eigenen JavaScript-Code entstehen. Und doch könnte folgender Fall eintreten: Gehen wir einmal davon aus, dass jQuery eine Funktion definiert, die sich hide nennt (und über die sie auch verfügt) und Sie ebenfalls eine Funktion namens hide in Ihrem eigenen Code verwendet haben. In diesem Fall würde eine der Funktionen überschrieben werden und dadurch unerwartete Ereignisse und Fehler auslösen. Wir geben an, dass die jQuery-Bibliothek im Namensraum von jQuery enthalten ist. Der Ansatz per Namensraum ermöglicht es, wundervoll mit anderen Codes auf einer Seite umzugehen, doch wenn wir jQuery häufig verwenden (was wir ja tun), wird es uns bald lästig sein, bei jedem neuen Befehl immer den gesamten Namen der jQuery-Funktion zu tippen. Um dies zu vermeiden, bietet jQuery ein Kürzel (ein Alias) für den Zugang zur Bibliothek: Schlichtweg das Zeichen $. Das Dollar-Zeichen steht als kurzer, wirksamer und cool aussehender Name für eine JavaScript-Variable. Man erspart sich dadurch nicht nur fünf Tastenanschläge, sondern erzeugt auch wesentlich lesbareren Code: eine umfangreiche Seite wird eine Menge von Bibliotheks-Aufrufen enthalten, die mithilfe des Kürzels besser überblickt und gewartet werden können. 28 Kapitel 1: Sich in jQuery verlieben Mehrere Bibliotheken nutzen Auf den wichtigsten Grund, lieber den ganzen jQuery-Befehl anstelle des Kürzels zu verwenden, stoßen Sie, wenn Sie mit mehreren JavaScript-Bibliotheken auf einer Seite arbeiten, die alle die Kontrolle über den Namen der $-Funktion für sich beanspruchen. Bei $ handelt es sich um einen allgemeinen Funktionsnamen, der in mehreren Bibliotheken verwendet wird und meist zum Auswählen von Elementen dient. Wenn Sie Probleme mit dem gleichzeitigen Einsatz mehrerer Bibliotheken haben, lesen Sie dazu den Abschnitt »Konflikte vermeiden« in Kapitel 9. 1.5.2 Ein jQuery-Statement analysieren Wir wissen nun, dass die jQuery-Befehle mit dem Aufruf jQuery beziehungsweise dessen Kürzel $ beginnen. Lassen Sie uns nun zum Skalpell greifen und die übrigen Bestandteile eines jQuery-Statements untersuchen. Bild 1.3 zeigt die beiden Varianten des gleichen jQuery-Statements (einmal mit ausgeschriebenem Funktionsnamen und einmal mit dem $-Kürzel). Bild 1.3: Ein typisches jQuery-Statement Jeder Befehl besteht aus vier Teilen: der jQuery-Funktion (oder ihrem Kürzel), Selektoren, Aktionen (oder Methoden) und Parametern. Über die jQuery-Funktion selbst wissen wir bereits Bescheid, sodass wir einen Blick auf die anderen Elemente werfen können. Als Erstes verwenden wir einen Selektor, um eines oder mehrere Elemente der Webseite auszuwählen. Im nächsten Schritt suchen wir eine Aktion aus, die auf jedes der ausgewählten Elemente angewendet wird. Im Laufe des Buchs werden Sie beim Implementieren von Effekten jede Menge Aktionen kennenlernen. Zum Schluss spezifizieren wir einige Parameter, um jQuery mitzuteilen, wie die gewählte Aktion genau ablaufen soll. Jedes Mal, wenn Sie einen jQuery-Code vorfinden, sollten Sie versuchen, ihn in diese genannten Komponenten aufzugliedern, was Ihnen am Anfang das Verständnis sehr erleichtern wird. In unserem obigen Beispiel ließen wir den Selektor alle Absatz-Tags (die <p>-Tags) der Seite auswählen. Danach wählten wir die jQuery-Aktion css, die benötigt wird, um eine CSS-Eigenschaft der zuvor ausgewählten Elemente zu modifizieren. Abschließend legten wir einige Parameter fest, um die CSS-Eigenschaft color auf den Wert blue zu setzen. Das Endergebnis? Alle unsere Absätze sind jetzt blau! In Kapitel 2 werden wir uns ausführlicher mit Selektoren und der Aktion css befassen. Unser Beispiel vergab zwei Parameter (color und blue) für die css-Aktion, doch die Anzahl der Parameter für eine Aktion kann differieren. Manche erfordern keinerlei Parameter, andere akzeptieren mehrere Sets von Parametern (um ein ganzes Paket von Eigenschaften auf einmal zu ändern), und manche erfordern, dass wir noch eine 1.6 DOM: Das Document Object Model 29 JavaScript-Funktion spezifizieren, damit der Code ausgeführt wird, wenn ein Ereignis stattfindet (wie etwa das Klicken auf ein Element). Alle Befehle folgen jedoch dieser grundlegenden Anatomie. Diese Anatomie gibt uns leistungsstarke Möglichkeiten zur Verkettung (Fachjargon: Chaining), bei der wir dem Selektor eine Reihe von Aktionen zuweisen können, die nacheinander ausgeführt werden. Das nennt man echte Power! 1.6 DOM: Das Document Object Model jQuery ist auf die nahtlose Integration mit HTML und CSS angelegt. Wenn Sie sich mit CSS-Selektoren auskennen und beispielweise wissen, dass sich div#heading auf ein <div>-Element mit einer id von heading bezieht, können Sie diesen Abschnitt nach Bedarf überspringen. Ansonsten ist ein kleiner Crash-Kurs in Sachen CSS-Selektoren und dem Document Object Model (DOM) angebracht. Das DOM gehört nicht speziell zu jQuery, sondern stellt einen Standard für die Repräsentation von Objekten in HTML dar, an den sich alle Browseranbieter halten. Mit fundierten Kenntnissen des DOM werden Sie die Wandlung zum jQuery-Ninja mühelos meistern. Das DOM ist eine hierarchische Repräsentation Ihres HTML-Markups, bei der jedes Element (wie ein <div> oder ein <p>) über ein Eltern-Element (seinen »Container«) verfügt und ein bis mehrere verschachtelte Kind-Elemente enthalten kann. Jedes Element kann eine id und/oder ein bis mehrere weitere class-Attribute aufweisen, die Sie normalerweise in ihrer HTML-Quelldatei zuweisen. Wenn der Browser eine HTMLSeite liest und das DOM aufbaut, erzeugt er zusammenfassende Objekte, die entweder einfach nur schön anzusehen sind (als statische Seite) oder, was viel interessanter ist, über unseren Code manipuliert werden können. Das Beispiel eines DOM-Fragments illustriert Bild 1.4. Wie Sie sehen, hat body zwei Kind-Elemente: ein <h1> und ein <p>. Da diese beiden Elemente demselben ElternElement angehören, werden sie als Siblings (Geschwister) bezeichnet. Bild 1.4: Das Beispiel eines DOM-Fragments 30 Kapitel 1: Sich in jQuery verlieben Die id eines Elements identifiziert das Element auf der Seite eindeutig: <div id="farewell">Come back and visit us soon!</div> Dem <div> wurde eine id von farewell zugeordnet. Es benutzt eine id zur eindeutigen Definition, die nur ein einziges Mal auf der Seite vorhanden sein sollte. Mithilfe des DOM können wir denselben Namen auch verschiedenen Seitenelementen via classAttribut zuweisen. Üblicherweise trifft das auf Elemente zu, die eine gemeinsame Charakteristik aufweisen. <p class="warning">Sorry, this field must be filled in!</p> <span class="warning">Please try again</span> In diesem Beispiel werden verschiedene Elemente als warning klassifiziert. Jedes CSS, das auf die Klasse (class) warning angewendet wird, betrifft hier beide Elemente. Mehrere class-Attribute desselben Elements werden (sofern sie erforderlich sind) durch Leerzeichen getrennt. Wenn Sie Ihr CSS schreiben, können Sie Elemente per id mit einem Rautensymbol auswählen oder per class mit einem Punkt: #footer { border: 2px solid black } .warning { color: red } Diese CSS-Regeln werden dem Element mit der id von farewell eine schwarze Linie zuordnen und gewährleisten, dass alle Elemente mit einer class von warning als roter Text erscheinen. Wenn es so weit ist, etwas jQuery zu schreiben, werden Sie merken, wie wichtig dieses Wissen über CSS-Selektoren und das DOM ist: jQuery benutzt dieselbe Syntax wie CSS, um Elemente auszuwählen, die auf der Seite manipuliert werden sollen. Und wenn Sie erst einmal das Auswählen beherrschen, ist der Rest dank jQuery überaus einfach! Wenn Sie sich dafür entscheiden … Bei jQuery handelt es sich um ein stabiles und ausgereiftes Produkt, das sich für Webseiten jeder Größe eignet, wie sein Einsatz bei so manch wahren Giganten im Internet demonstriert. Trotz alledem ist jQuery nach wie vor ein dynamisches Projekt, das ständig weiterentwickelt und verbessert wird. Mit jeder neuen Version steigert sich die Performance und das Angebot an ausgeklügelten zusätzlichen Funktionen. Es gibt keinen besseren Zeitpunkt als jetzt, um jQuery zu erlernen und einzusetzen! Wenn Sie sich durch unser Buch arbeiten, werden Sie feststellen, dass in jQuerys Motto »Write less, do more« (»schreibe weniger, tue mehr«) viel Wahrheit steckt. Mit dieser ebenso einfachen wie leistungsstarken Bibliothek können Sie in sachten Lernschritten tolle Projekte mit sehr wenig Code verwirklichen. Und während Sie sich auf dem Weg zur jQuery-Ninja-Meisterschaft voranarbeiten, bleibt zu hoffen, dass Sie auch ein wenig Achtung und Verständnis für JavaScript bekommen. In Kapitel 2 werden wir tiefer in jQuery einsteigen und der Webseite unseres Kunden damit etwas Glanz verleihen. Apropos Kunde – es ist Zeit für das erste Treffen mit seinem Team … 329 A Referenzmaterial Bei jQuery dreht sich alles um die Flexibilität und die Anwendungsmöglichkeit auf so viele Situationen wie möglich. Sowohl die Kernbibliothek als auch die Plugin-Architektur untermauern diesen Anspruch. Die meisten üblichen Anwendungsszenarien lassen sich mit den Standardoptionen von jQuery bewältigen, doch Sie genießen auch die Flexibilität, diese Voreinstellungen zu variieren. Das zieht jede Menge Optionen nach sich, die Sie sich jedoch nicht alle einprägen müssen – ein schneller Blick in die OnlineDokumentation76 hilft Ihnen garantiert weiter. Und scheuen Sie sich nicht, in den Source-Code von jQuery oder den entsprechenden Plugins abzutauchen, um weitere Details aufzuspüren, die in der Dokumentation nicht verzeichnet sind. A.1 $.ajax-Optionen Die mächtigen Ajax-Funktionen von jQuery sind in einer einzigen Methode vereint: $.ajax. Diese Methode akzeptiert eine Vielzahl von Optionen, was sie für den Einsatz in nahezu allen erdenklichen Situationen prädestiniert. Wir haben zwar schon einige dieser Optionen im Buch behandelt, doch wie es immer bei jQuery ist – es gibt noch viel mehr! Sie sollten stets die Dokumentation auf Änderungen überprüfen, und können die nachfolgenden Seiten als Referenz für Ihre Projekte nutzen. A.1.1 Flags Die »flaggable« Optionen akzeptieren einen booleschen Wert – true oder false – um die entsprechende Funktionalität zu aktivieren und zu deaktivieren. In den meisten Fällen reichen die Grundeinstellungen vollkommen aus, doch Sie können diese jederzeit Ihren Bedürfnissen anpassen. async Die Option async ist standardmäßig auf true gesetzt, doch wenn Sie eine synchrone Anfrage starten wollen, können Sie sie auf false setzen. Das sollten Sie allerdings unbedingt vermeiden, da es den Browser für die Zeit der Anfrage sperrt. Aus diesem Grund ist es wahrscheinlich, dass dieses Feature in der Zukunft als veraltet deklariert werden wird. cache Wenn ein Browser die Ergebnisse vorangegangener Abfragen im Cache speichert, kann es zu Problemen kommen – es kann passieren, dass die neuesten Daten nicht abgefragt 76 http://api.jquery.com/ 330 Anhang A: Referenzmaterial werden. Um das Ablegen im Cache zu verhindern, können Sie die Option cache auf false setzen. Script- und JSONP-Anfragen werden standardmäßig nicht im Cache gespeichert. crossDomain jQuery setzt dieses Flag automatisch bei Anfragen innerhalb derselben Domain auf false und bei Cross-Domain-Anfragen auf true. Wenn Sie die Automatik nicht verwenden möchten, können Sie sie mit diesem Flag außer Kraft setzen. global Wir haben gesehen, dass wir Ereignisse von Ajax-Anfragen mit globalen Event Handlern behandeln können. Sie können die globalen Event Handler für die Behandlung eines bestimmten Ereignisses abschalten, indem Sie dem Parameter global den Wert false zuordnen. ifModified Indem Sie das ifModified-Flag setzen, können Sie eine Anfrage dazu zwingen, erfolgreich zu sein (also den success-Handler auszulösen), wenn das Dokument seit der letzten Anfrage modifiziert wurde. Das ist dann sehr nützlich, wenn Sie eine Bearbeitung nur dann durchführen wollen, wenn es neue Daten zum Darstellen gibt. isLocal Damit legen Sie die Umgebung als »lokal« fest. Das ist so, als wenn Sie Ihre Site von einer file:///-URL statt über einen realen Server betrachten. processData Wenn Sie zusammen mit Ihrer Anfrage Daten übermitteln, werden diese von jQuery verarbeitet und in einen gültigen Abfrage-String konvertiert. Sollte dies nicht erwünscht sein – etwa dann, wenn Sie ein DOM-Dokument oder eine andere Art von Struktur übergeben wollen – können Sie das Flag processData auf false setzen. traditional Neuere Versionen von jQuery serialisieren Objekte und komplexere Strukturen, wobei einige Server-seitige Sprachen dafür keine Unterstützung bieten. Wenn Sie die alte Vorgehensweise zur Serialisierung verwenden möchten, setzen Sie dieses Flag auf true. A.1.2 Einstellungen Viele Ajax-Optionen erlauben Ihnen statt simpler An/Aus-Werte auch die Übergabe von Strings oder Objekten, um Ihre Ajax-Anfrage entsprechend einzurichten und abzustimmen. accepts Sie können angeben, welche Art von Antwort des Servers Sie bearbeiten möchten, indem Sie eine Map an die Einstellung accepts übergeben; zum Beispiel: { xml: 'application/ xml ', text: 'text/plain ' }. Wenn Sie diese Modifikation vornehmen müssen, empfehlen wir Ihnen die einmalige Anwendung im globalen Ajax-Setup. A.1 $.ajax-Optionen 331 contents Mit dieser Einstellung können Sie die standardmäßig eingestellte Art und Weise übergehen, wie jQuery einen bestimmten Inhaltstyp übergibt, also ihn in eine Map, einen String oder einen regulären Ausdruck packt. Beispiel: Standardmäßig wird xml an Regex /xml/ und Text an /text/ angepasst. contentType Mit contentType legen Sie die Inhaltsart für die Anfrage fest, die standardmäßig auf die für die meisten Anwendungsfälle ideale application/x-www-form-urlencoded festgelegt ist. context Wenn Ajax-Callbacks ausgeführt werden, ist ihr Kontext das window-Objekt, was meist nicht sehr sinnvoll ist. Deshalb setzen Sie die context-Option so, dass die this-Eigenschaft in einem Callback auf ein praktisches Tool wie selbst geschriebenes JavaScript oder ein jQuery-Element verweist. converters Eine weitere fortgeschrittene Einstellung, die dataType-Werte in andere dataType-Werte überführt. data Um Daten an den Server zu übergeben, spezifizieren Sie einen String, ein JavaScriptArray oder ein Objekt für die data-Einstellung. Wenn Sie ein Array oder Objekt übergeben und das processData-Flag nicht ausgeschaltet haben, werden die Daten mit der Utility-Funktion jQuery.params serialisiert. Dadurch wird der Inhalt in ein QueryString-Format konvertiert (sehr praktisch!). Handelt es sich um eine GET-Abfrage, wird der String an die URL angehängt. dataType Während Sie mit contentType den an den Server zu übermittelnden Inhaltstyp festlegen, bestimmt der Parameter dataType den Datentyp, den Sie vom Server empfangen. Die Voreinstellung lautet »alles« (*/*), doch Sie können auch xml, html, script, json oder text vorgeben, woraufhin jQuery den passenden String für den Inhaltstyp verwendet. headers Wenn Sie Header für die aktuelle Anfrage hinzufügen oder ändern wollen, können Sie diese in einer Map spezifizieren. jsonp Wenn Sie JSONP-Aufrufe ausführen, die Cross-Domain-Anfragen erlauben, wird davon ausgegangen, dass der Name der Callback-Funktion callback ist. Wenn der Service, den Sie verwenden, eine unterschiedliche Bezeichnung verwendet, können Sie diese mit der jsonp-Einstellung definieren. mimeType Verwenden Sie diese Einstellung, um den vorgegebenen Mime-Typ zu überschreiben. 332 Anhang A: Referenzmaterial password Die Authentifizierung erfordert Ihren Anwendernamen und ein Passwort. Sie können letzteres mit der Einstellung password definieren. scriptCharset Die Eigenschaft scriptCharset erlaubt Ihnen die Angabe des Charaktersets von scriptTags, die über script oder jsonp-Aufrufe injiziert werden. statusCode Hierbei handelt es sich um ein praktisches Mapping von Statuscodes auf Funktionen, mit dem sich bestimmte Server-Antworten behandeln lassen. Wenn der Statuscode einen Treffer ergibt (z. B. 404 not found), wird die entsprechende JavaScript-Funktion aufgerufen. timeout Der Parameter timeout hat die Ehre, die einzige Ajax-Einstellung zu sein, die einen Zahlenwert akzeptiert: Er gibt an, wie viele Millisekunden vergehen sollen, bevor eine Ajax-Anfange abgebrochen wird. type Eine der wichtigsten Einstellungen für eine Ajax-Anfrage. Die Eigenschaft type gibt den HTTP-Anfragentyp vor: GET, POST, PUT oder DELETE. url Neben type die zweitwichtigste Einstellung: Der url-String enthält die Adresse des Servers, an den Sie eine Anfrage schicken wollen. username Während Sie im password-Feld das Passwort für die Authentifizierung eingeben, dient die Option username zur Angabe des Anwendernamens, der abgeschickt wird. xhrFields Damit mappen Sie Feldnamen auf Feldwerte, die auf das zugrunde liegende XHRObjekt angewendet werden. A.1.3 Callbacks und Funktionen Zu guter Letzt gibt es noch einen Haufen Callbacks und Funktionen, mit denen Sie Ihre Anfragen feintunen können und Ereignisse behandeln können, die während der Anfrage auftreten. Wir haben die Event Handler bereits in Kapitel 6 ausführlich behandelt. Der completeHandler wird immer dann ausgelöst, wenn ein $.ajax-Call erfolgt ist – unabhängig davon, ob erfolgreich oder nicht. Der error-Handler wird ausgelöst, wenn die Anfrage nicht erfolgreich war, und der success-Handler nach einer erfolgreichen Anfrage. Darüber hinaus gibt es noch eine Handvoll von Funktionen, die als Anker dienen – mit diesen modifizieren Sie verschiedene Bestandteile einer Anfrage auf einer Call-by-CallBasis. Die Funktion beforeSend wird ausgelöst, bevor die Sende-Nachricht ausgeführt A.2 $.support-Optionen 333 wird, und gibt Ihnen die Möglichkeit, Ihre Anfrage bei Bedarf zu modifizieren. Ihr Handler erhält das Anfrage-Objekt und das aktuelle jQuery-Objekt. Hier können Sie Request Header modifizieren. Es ist auch Ihre letzte Chance, einzugreifen: Wenn Sie von dieser Funktion false zurückgeben, wird die Anfrage abgebrochen. Der jsonpCallback (String-Bezeichnung oder Funktion) kann statt des zufällig generierten Namens verwendet werden, den jQuery standardmäßig für JSONP-Anfragen verwendet. Damit genießen Sie eine bessere Kontrolle darüber, wie die Anfragen im Cache abgelegt werden. Die Magie von Ajax liegt in der Browser-Implementierung des Objekts XMLHTTPRequest (oder kurz XHR) verborgen. Dabei handelt es sich um die eigentliche Kommunikationsschnittstelle zwischen Server und Client. Standardmäßig sucht jQuery nach dem passenden XHR-Objekt und verwendet dieses für alle AjaxCalls. Sie können dieses Objekt modifizieren oder mit Ihrer eigenen xhr-Funktion ersetzen. Diese Funktion muss das Objekt zurückgeben, das verwendet werden soll. Der letzte verfügbare Anker ist die Funktion dataFilter. Diese wird aufgerufen, wenn eine Anfrage erfolgreich war, und hilft Ihnen beim Sicherstellen, dass die Daten der Antwort in Ordnung sind. Wenn Sie irgendeine Art der Datenprüfung und -pflege durchführen wollen, ist das der richtige Ort für Sie. Die dataFilter-Funktion erhält die reinen Antwortdaten und den entsprechenden Typ. Sie sollten die Daten gleich nach der Verarbeitung zurückgeben, damit der Anfragenzyklus fortgesetzt werden kann. A.2 $.support-Optionen In der Vergangenheit haben wir Browser Sniffing verwendet, um herauszufinden, welche Version welchen Browsers verwendet wird, und haben unseren Code an bekannte Bugs angepasst. Diese Zeiten sind vorbei, denn wir haben nun eine wesentlich zuverlässigere Alternative. Wann immer wir können, sollten wir per Feature Detection ermitteln, was der Browser kann und was nicht, und gegebenenfalls einen Workaround oder eine Fallback-Option einbauen. Wenn Sie reines jQuery verwenden, werden die meisten dieser Probleme intern gelöst, doch wenn Sie sich die Hände schmutzig machen mit reinem JavaScript, sollten Sie folgenden Mechanismus zur Feature Detection mit der Aktion support einsetzen. Wir haben dieses Thema bereits kurz in Kapitel 6 angerissen, doch dort haben wir die vielen verfügbaren Optionen ausgespart. Sie geben allesamt einen true- oder false-Wert zurück, der innerhalb eines if/then/else-Blocks verwendet werden kann, um Unterstützung für beide Fälle zu bieten. Hier ein Beispiel: var domObject = document.getElementById('content'); if ($.support.cssFloat) { domObject.style.cssFloat = "left"; } else { domObject.style.styleFloat = "left"; } Nachfolgend eine Übersicht über die verfügbaren Optionen: ajax Dieser Wert ist true, wenn der Browser ein XHR-Objekt erstellen kann. 334 Anhang A: Referenzmaterial boxModel Die Eigenschaft boxModel (die zu Beginn auf null gesetzt ist und nach dem Laden des Dokuments auf true oder false umspringt) wird true sein, wenn der Browser Inhalte gemäß der Vorgaben des W3C Box Model rendert. checkClone Der checkClone-Wert wird false sein, wenn bei einer geklonten Checkbox oder einem Radiobutton das Attribut checked nicht unterstützt wird. checkOn Gibt true zurück, wenn der Wert einer Checkbox standardmäßig auf »an« gestellt ist, wenn kein Wert angegeben wird. cors Ist true, wenn der Browser ein XHR-Objekt erstellen kann, das Ihnen die Spezifizierung der Eigenschaft withCredentials erlaubt, welche für Cross-Domain-Calls mit dem Cross-Origin Resource Sharing Mechanism erforderlich ist. changeBubbles Die Ermittlung der Reaktion von Browser-Features auf bestimmte Ereignisse ist kompliziert – und einer der Hauptgründe für das Browser Sniffing. Einige helle Köpfe haben eine Lösung für das Problem gefunden – wenn Sie wissen wollen, ob Sie (zuverlässig) auf das Ereignis change reagieren können, prüfen Sie einfach die Eigenschaft changeBubbles. cssFloat Wir haben cssFloat im obenstehenden Beispiel in Aktion erlebt. Es findet heraus, ob der Browser das Label cssFloat verwendet, um den Float-Stil in JavaScript zu adressieren. Es ist unmöglich, einfach nur float zu verwenden, da es sich dabei um ein JavaScriptSchlüsselwort handelt. Internet Explorer verwendet styleFloat statt cssFloat. hrefNormalized Einige Browser ändern automatisch Links, die sie als falsch konstruiert erachten – was zu einem großen Problem werden kann, wenn Sie nicht damit gerechnet haben! Die Eigenschaft hrefNormalized gibt true zurück, wenn der Browser die Links modifiziert. htmlSerialize Wenn Sie sicherstellen möchten, dass Link-Elemente wie link und script-Tag unter Verwendung von innerHTML korrekt serialisiert werden, verwenden Sie die Eigenschaft htmlSerialize. Internet Explorer hat Probleme damit, sodass Sie die betreffenden Tags in eigene, umschließende Elemente packen sollten. leadingWhitespace Die Option leadingWhitespace teilt Ihnen mit, ob der Browser den ersten Knoten in einem DOM-Kind als Leerzeichen belässt oder nicht. Wenn innerHTML verwendet wird, entfernt Internet Explorer das erste Kind, wenn es sich um einen Leerzeichen-Textknoten handelt, was zu schweren Problemen führen kann, wenn Sie von einer bestimmten Anzahl von Kindern ausgehen. A.2 $.support-Optionen 335 noCloneEvent Wenn Sie einen DOM-Knoten klonen, klonen einige Browser die angefügten Event Handler mit, während andere dies nicht tun. Werden Ereignisse nicht mit geklont, gibt die Eigenschaft noCloneEvent den Wert true zurück. opacity Wir sind alle große Fans von Transparenz: Sie lässt unsere Sites futuristisch aussehen. Unglücklicherweise können einige Browser nicht mit via JavaScript erstellten Transparenzen umgehen (mit jQuery sind Sie hier auf der sicheren Seite). Die Eigenschaft opacity prüft, ob die Rendering-Engine mit Transparenz umgehen kann. Ist dies nicht der Fall, müssen Sie auf die Filter des entsprechenden Browsers ausweichen. optDisabled Gibt true zurück, wenn option-Elemente innerhalb von select-Elementen automatisch deaktiviert werden. optSelected Gibt true zurück, wenn standardmäßig ausgewählte Optionselemente korrekt als ausgewählt gemeldet werden. scriptEval Browser verhalten sich unterschiedlich beim Ausführen von Scripts mit injizierten script-Tags. Die Eigenschaft scriptEval sagt Ihnen, ob es sicher ist, mit appendChild zu injizieren, oder ob Sie besser die Eigenschaft script.text nutzen sollten. style Um den aktuell einem Element zugewiesenen Stil herauszufinden, nutzen Sie in der Regel die Methode getAttribute und fragen nach style. Um zu testen, ob getAttribute("style") im Browser des Anwenders funktioniert, überprüfen Sie die Eigenschaft style. submitBubbles Mit der Eigenschaft submitBubbles können Sie das submit-Event prüfen. Intern verwendet diese Eigenschaft dieselben Feature-Detection-Tricks wie changeBubbles. tbody Einige Browser fügen automatisch ein tbody-Element in eine leere table ein, was Ihre DOM-Manipulationen zunichtemachen kann. tbody gibt (verwirrenderweise) true zurück, wenn das tbody-Element nicht automatisch eingesetzt wird. Das Beste an der Aktion support ist die Tatsache, dass Sie dazu gezwungen werden, die entsprechenden Bugs zu verstehen. Mit Browser Sniffing macht man es sich leicht und fügt oft viel mehr Code als nötig in die Bedingungsblöcke ein. Mit support nehmen Sie ausschließlich spezifische Aspekte aufs Korn, sodass Sie die bestmögliche Seitendarstellung auch dann erhalten, wenn die Hersteller die Codes ihrer Browser modifizieren. 336 A.3 Anhang A: Referenzmaterial Ereignisse Wir haben viel Zeit damit verbracht, Ereignisse zu analysieren – und haben mehrmals erwähnt, dass jQuery das Browser-übergreifende Event Handling deutlich erleichtert, da die Events auf den W3C-Standard normalisiert werden. Ein normalisiertes EreignisObjekt verfügt über einen Stapel nützlicher Eigenschaften und Methoden. Einige davon haben wir im Buch verwendet, und nun werfen wir einen Blick auf jene, die wir noch nicht kennengelernt haben! Eine komplette Liste aller Ereignis-Eigenschaften finden Sie in der Dokumentation von jQuery77 A.3.1 Ereignis-Eigenschaften In Kapitel 9 haben wir gelernt, dass Ihnen die Eigenschaft type den Namen des ausgewählten Events zurückgibt (das geht selbst bei eigenen Events, sofern sie benannt wurden). Wenn ein Event Handler aufgerufen wurde, können Sie mittels der Eigenschaft target jenes DOM-Element herausfinden, das die Quelle des Ereignisses war. Das können Sie dann in einen jQuery-Selektor packen, um dem DOM zu entkommen und zurück nach jQuery-Land zu gelangen. Wenn es sich um ein auf Mausbewegung basierendes Ereignis handelt, können Sie mit relatedTarget auch das vorherige Ziel herausfinden (also wo der Mauspfeil sich zuvor befunden hat). Und wenn sich das Ereignis in der Hierarchie nach oben bewegt – Sie also mit »bubbling« Events hantieren – informiert Sie currentTarget über die aktuelle Bubbling-Phase. Die Eigenschaft data gibt alle Daten zurück, die Sie beim Binden des Ereignisses hinzugefügt haben, und which verrät Ihnen, welche Taste bei Tastatur-Ereignissen gedrückt wurde. Eine letzte, extrem nützliche Eigenschaft ist der timeStamp eines Ereignisses. Dieser verrät Ihnen die exakte Zeit, zu der das Ereignis aufgetreten ist, und eignet sich ideal zur Implementierung zeitbasierter Effekte. Wenn Sie zum Beispiel ein spezielles Event einbauen wollen, das nach drei Mausklicks stattfindet, konsultieren Sie die Timestamps des Ereignisses, um zu sehen, ob die drei Klicks während einer gewissen Zeitspanne aufgetreten sind. A.3.2 Ereignis-Methoden Wir haben Ereignis-Methoden wie preventDefault und stopPropagation kennengelernt, die uns die Kontrolle über das »Bubbling« von Events geben und die vom Browser verarbeitet werden. Derselben Gattung gehört die Methode stopImmediatePropagation an, die ein wenig komplexer ausfällt als stopPropagation. Während stopPropagation lediglich die Ausführung der Eltern-Handler unterbindet, stoppt stopImmediatePropagation die Ausführung jedes weiteren Event Handlers – selbst auf demselben Element. Der Rest der Methoden dient einfach dazu, zu ermitteln, ob eine der anderen Methoden aufgerufen wurde. So geben die Methoden isDefaultPrevented, isPropagationStopped und isImmediatePropagationStopped einen booleschen Wert zurück, der so lange false bleibt, bis die entsprechenden Kommandos ausgeführt worden sind. 77 http://docs.jquery.com/Events/jQuery.Event A.3 Ereignisse A.3.3 337 DIY-Ereignis-Objekte Wo wir gerade von Ereignissen reden: Es gibt einen finalen Aspekt, den Sie kennen sollten: Sie können Ihre eigenen Event-Objekte gestalten und sie direkt an die Handler übergeben. Führen Sie sich diesen Code zu Gemüte: // Regular event binding $('p').bind('click', function(e) { $(this).text(e.pageX); }); // Home-made event object! var e = $.Event('click'); e.pageX = 100; e.pageY = 100; $('p').trigger(e); Wir haben ein künstliches Click-Event generiert und dessen Eigenschaften pageX und pageY manuell gesetzt. Das verleiht Ihnen die ultimative Kontrolle über die Details des Ereignisses, das einen Event Handler triggert. 339 B JavaScript-Leckerbissen Wir können es gar nicht oft genug wiederholen: jQuery ist nichts weiter als JavaScript – wenn Sie also Ihre jQuery-Kenntnisse aufpolieren möchten, sollten Sie sich mit JavaScript auseinandersetzen! Nachfolgend werfen wir einen Blick auf einige Aspekte von JavaScript, die wir im Buch öfters verwendet haben und über die Sie vielleicht gerne mehr erfahren möchten. B.1 JavaScript – eine zwanglose Sprache JavaScript wird als relativ zwanglose Sprache angesehen. Andere Sprachen, wie beispielsweise Java, erfordern die Einhaltung strikter Regeln: Eine Variable muss gesetzt werden, wenn sie deklariert wurde. JavaScript schenkt hierbei den Entwicklern mehr Freiheiten – der Typ einer Variable kann sich je nach Anforderung verändern: var a = 2; var b = "two"; var c = "2"; alert(typeof a);// alerts "number" alert(typeof b);// alerts "string" alert(typeof c);// alerts "string" Keine Überraschung: Die Variablen verhalten sich so, wie wir es von ihnen erwarten. Das sieht allerdings anders aus, wenn wir JavaScript beurteilen lassen, welchem Typ die Variablen unserer Ansicht nach entsprechen sollen: alert(a * a);// alert(a + b);// alert(a * c);// alert(typeof (a alert(typeof (a alert(typeof (a alerts 4 alerts 2two alerts 4 * a));// alerts "number" + b));// alerts "string" * c));// alerts "number" Wenn wir einen String und eine Zahl mit dem Operator + »addieren«, nimmt JavaScript an, dass wir die beiden aneinanderreihen möchten, und erzeugt damit einen neuen String. Dabei wird der Variablentyp der Zahl auf string gesetzt. Wenn wir dagegen den Multiplikations-Operator (*) verwenden, geht JavaScript davon aus, dass wir die beiden Variablen als Zahlen haben möchten. An der Variable selbst ändert sich dabei nichts, lediglich an der Behandlung durch JavaScript. Wir können JavaScript jederzeit exakt mitteilen, welchen Variablentyp wir wünschen, doch wenn wir das nicht tun, müssen wir verstehen, wie JavaScript reagiert. Deshalb hier ein weiteres Beispiel: alert(a + c);// alerts 22 alert(a + parseInt(c));// alerts 4 340 Anhang B: JavaScript-Leckerbissen jQuery kennt sein JavaScript jQuery kann uns in diesem Bereich dank der Helfer-Funktion $.type ein wenig unter die Arme greifen. Diese Funktion akzeptiert eine Variable oder einen Ausdruck und gibt dessen Typ zurück. So gibt $.type(5) »number« zurück, und $.type([]) »array«. B.2 Gleichheits-Operatoren Das Gleichheitszeichen (=) und seine verwandten Operatoren können eine Falle für Einsteiger darstellen. Dessen Funktionsweise war schon lange ein wenig seltsam, doch mit JavaScript 1.3 wurde dies auf die Spitze getrieben. Zunächst einmal müssen Sie sich vergegenwärtigen, dass sich das Gleichheitszeichen von jenem unterscheidet, das Sie im Mathematikunterricht kennengelernt haben: var a = 2; var b = "2"; Ein einzelnes Gleichheitszeichen wird als Assignment Operator bezeichnet, der dazu dient, Werte den Variablen zuzuordnen. Wir alle wussten, was es machte, doch nun wissen wir, wie es genannt wird: var c = (a == b); Zwei =-Zeichen hintereinander (also ==), ergeben einen Equality Operator, der einen booleschen Wert zurückgibt. In unserem Beispiel wird die Variable c den Wert true erhalten, da JavaScript die Werte vor und nach dem Gleichheits-Operatoren vergleicht und sie als gleich betrachtet. Dabei achtet JavaScript nicht auf den Variablentyp und versucht, die Werte selbsttätig einzuschätzen. Tauschen Sie das erste Gleichheits-Zeichen durch ein Ausrufezeichen aus, erhalten Sie einen Inequality Operator (!=). Dieser Operator wird false zurückgeben, wenn die Variablen gleich sind; andernfalls erhalten Sie true: var d = (a != b); Die Variable d wird nun den Wert false erhalten, da wenig komplex sein, aber zumindest ist es konsistent. a und b gleich sind. Das mag ein In JavaScript 1.3 wurde die Situation mit der Einführung des neuen Strict Equality Operator (===) erheblich verkompliziert: var e = (a === b); Der Strict Equality Operator achtet nicht nur auf den Wert der Variable, sondern auch auf deren Typ. Im oberen Fall wird d auf false gesetzt, obwohl a und b beide über den Wert 2 verfügen, aber unterschiedliche Typen sind. Und wie Sie sicher schon geahnt haben, gibt es auch das passende Gegenstück, den Strict Inequality Operator: var f = (a !== b); B.3 Truthiness und Falsiness 341 In diesem Beispiel wird die Variable f den Wert true zurückgeben, da es sich bei den Variablen um unterschiedliche Typen bei gleichen Werten handelt. Manche Dinge sind eben gleicher als andere gleiche Dinge! B.3 Truthiness und Falsiness Der boolesche Typ von JavaScript kennt zwei mögliche Werte: true und false: var jQueryIsFun = true; var javaScriptIsJava = false; Doch wir wissen, dass JavaScript in dieser Disziplin ein paar Tricks auf Lager hat. In der Praxis gibt es eine Vielzahl von Möglichkeiten, Variablen als true oder false bewerten zu lassen. Diese Werte werden im Fachjargon als truthy oder falsy bezeichnet. Wenn wir zum Beispiel if(variable) { … } schreiben, muss variable kein boolescher Wert sein. Der Code in den geschweiften Klammern wird unabhängig davon ablaufen, ob die Variable die Zahl 5, den String »Hello World!" oder gar ein leeres Array enthält. Jeder Wert, der sich in dieser Art von Kontext wie der boolesche Wert true verhält, wird als truthy, und jeder Wert, der sich wie false verhält, wird als falsy bezeichnet. truthy falsy true 1 false (da es sich um eine andere Zahl als 0 handelt) 0 (die Zahl Null) "0" (da es sich um einen String handelt, der nicht leer ist) "" (da es sich ebenfalls um einen nichtleeren String handelt) null "false" function() {} (jede Funktion) {} (jedes Objekt) [] (jedes Array) (ein leerer String) undefined (der spezielle numerische Wert »Not a Number«) NaN Diese Werte können in Kombination mit dem logischen Operator NOT interessante Effekte erzielen. Dabei wird ein einzelnes Ausrufezeichen verwendet: var a = var b = if (!b) // do } else if // do } 0; 1; { something (!a) { something else Der logische Operator NOT gibt true zurück, wenn der Wert der Variable false ist, und umgekehrt wird er false zurückgeben, wenn der Wert true ist. Im Beispiel ist b truthy, sodass !b den Wert false zurückgibt, und a ist falsy, sodass !a true zurückgibt – also würde der Code im Block else if ausgeführt werden. 342 Anhang B: JavaScript-Leckerbissen Bedenken Sie stets, dass ein Wert == true nur truthy sein kann, und nicht strikt true: var a = var b = alert(a alert(a alert(a alert(a true; 1; == b);// alerts true === b);// alerts false != b); // alerts false !== b); // alerts true Wenn Sie die Möglichkeit dazu haben, sollten Sie stets die booleschen Werte true und false verwenden. Wenn eines auf der Welt zweifellos wahr ist, dann ist es die Tatsache, dass die Jagd auf einen durch truthy oder falsy entstandenen Logikfehler eine echte Qual sein kann! Es ist nicht GANZ so einfach Da wir uns in einem Anhang befinden, können wir hier problemlos erwähnen, dass x === null || x === undefined äquivalent zu x == null ist. Das ist ein typischer Fall, in dem das doppelte Gleichheitszeichen verwendet werden sollte! B.4 jQuery demaskieren Wie wir bereits öfters erwähnt haben, handelt es sich bei jQuery nicht um Magie, sondern lediglich um JavaScript. Und da JavaScript stetig verbessert wird, werden viele der Löcher, die jQuery bislang gestopft hat, kontinuierlich aufgefüllt. Hier einige Vergleiche zwischen jQuery und einfachem, alten JavaScript: $("div"); // in jQuery document.querySelectorAll("div"); // in JavaScript $("<div/>"); // in jQuery document.createElement("div"); // in JavaScript myElement.addClass("classy"); // in jQuery newDiv.classList.add("classy"); // in JavaScript newDiv.toggleClass("classy"); // in jQuery newDiv.classList.toggle("classy"); // in JavaScript $("#myElement").next(); // in jQuery document.getElementById("myElement").nextSibling; // in JavaScript Selbst diese wenigen Beispiele zeigen schon deutlich auf, dass jQuery die kürzeren und knapperen Alternativen bietet. Darüber hinaus verwendet die JavaScript-Version neue Features, die in älteren Browsern nicht verfügbar sind. Sie müssen sich stets vergegenwärtigen, dass es sich bei jQuery um eine Hülle handelt. Wenn Sie verstehen, was innerhalb dieser Hülle abläuft, verbessern Sie Ihre JavaScript-, jQuery- und generellen Entwickler-Kenntnisse für das Web. Und wenn Sie lediglich eine kleine Konzept-Demo verfassen, kann die Integration von jQuery auch völlig unnötig sein. 343 C Plugin-Helfer Einige jQuery-Eigenschaften und -Aktionen sind besonders hilfreich für die Entwicklung von Plugins. Der Grund dafür, warum wir diese in den Anhang ausgelagert haben, liegt in ihrer recht seltenen Anwendung. Unabhängig davon handelt es sich um sehr mächtige Funktionen, die Sie sich als Plugin-Entwickler unbedingt näher ansehen sollten. C.1 Selektor und Kontext Zunächst möchten wir einen Blick auf die Eigenschaften selector und context werfen. Diese arbeiten zusammen, um Ihnen zu zeigen, woran jQuery gerade arbeitet. Es handelt sich im Grunde genommen um interne Methoden, doch je nach Plugin ist es gut, von diesen zu wissen. Die Eigenschaft selector gibt einen String-Wert mit dem aktuellen jQuery-Selektor zurück – das Kommando $('p:first').selector würde also beispielsweise »p:first« zurückgeben. Innerhalb eines Plugins ist dies überaus nützlich, wenn Sie wissen wollen, was der Anwender ausgewählt hat. Der optionale zweite Parameter context führt ein wenig in die Irre – es handelt sich nicht um das, was Sie durch die Eigenschaft context erhalten. Sie übergeben context in Form eines Strings, woraufhin es intern in ein herkömmliches jQuery-Statement verwandelt wird, das Einfluss auf die Eigenschaft selector hat: var selector = $('p:first', '#content').selector var context = $('p:first', '#content').context Im Beispiel werden selector in »#content p:first« und context in Document aufgelöst (also jenem Kontext, indem sich all Ihre Selektoren standardmäßig befinden). Die Eigenschaft context wird nur dann modifiziert, wenn Sie einen DOM-Knoten übergeben: var domContext = $('#content')[0]; // Get the DOM element var selector = $('p:first', domContext).selector; var context = $('p:first', domContext).context; In diesem Fall wird der selector als »p:first« ausgegeben, und der context wird das DOM-Element selbst sein (im Beispiel handelt es sich um das Element <div id="content">). Die Angabe eines DOM-Knotens garantiert nicht, dass Ihre Anfragen schneller laufen, denn intern wird die Selektor-Engine von jQuery nur innerhalb des von Ihnen angegebenen Kontexts suchen – auch wenn die Eigenschaft context als Document angegeben wird. 344 C.2 Anhang C: Plugin-Helfer Der jQuery-Stapel Um eine flüssige Arbeitsweise Ihrer Plugins mit jQuery sicherzustellen, sollten Sie jedes jQuery-Element aus Ihrem Code zurückgeben, sodass die Kommandos nach dem Plugin weiterhin verkettet werden können. Normalerweise modifizieren wir die Elemente in der Auswahl, bevor wir sie zurückgeben, doch manchmal möchten wir auch die zurückgegebenen Elemente verändern – um beispielsweise Elemente zu entfernen oder hinzuzufügen. Dies bewerkstelligen Sie am Besten über die Aktion pushStack, die einen komfortablen Weg zum Erstellen einer jQuery-Auswahl zur Integration in die Kette darstellt. Als Beispiel nehmen wir ein kleines Plugin, das jene Elemente abruft, die das ausgewählte Element umgeben. Damit können Sie beispielsweise den vorangegangenen und den nächsten Eintrag in einer Liste mit Elementen hervorheben. Unser Plugin erkennt dabei, ob es sich beim ausgewählten Element um das erste oder letzte in der Liste handelt: jQuery.fn.surrounds = function() { var prev = this.index() == 0 ? this.siblings(':last') : this.prev(); var next = this.index() == this.siblings().length ? this.siblings(':first') : this.next(); var newStack = prev.add(next); return this.pushStack(newStack, 'surrounds', ''); }; Das Plugin ruft die vorangegangenen und nächsten Elemente ab, und kombiniert diese mithilfe der Aktion add zu einer gemeinsamen Auswahl. Diese neue Sammlung wird via pushStack zurückgegeben, das die Sammlung selbst, einen Namen für diese sowie einen Namen für den Selektor-String akzeptiert. Die beiden Namens-Parameter sind von der Eigenschaft selector lesbar, die wir weiter oben behandelt haben. Um dieses Plugin zu verwenden, könnten wir es einer ungeordneten Liste mit der Bezeichnung categories zuweisen: $('#categories li:first') .surrounds() .css('color', 'red') .end() .css('color', 'blue'); Dies wählt die beiden Elemente aus, die das erste Listenelement umgeben, und färbt diese rot ein. Da wir pushStack verwendet haben, bleibt die jQuery-Kette intakt, sodass wir mit dem Kommando end zur originalen Auswahl (dem ersten Listenelement) zurückkehren und diese blau einfärben können. Sie können pushStack jedes Mal verwenden, wenn Sie eine Kette auf diese Weise modifizieren möchten. Ein weiterer netter Trick ist die Möglichkeit, auf andere Schritte innerhalb der Kette zuzugreifen. Wie Sie wissen, bringt Sie die Aktion end eine Ebene nach oben zum letzten Kommando, das die jQuery-Auswahl modifiziert hat. Wenn Sie den jQuery-Code betrachten, erkennen Sie, dass end unter Verwendung der Eigenschaft prevObject implementiert wurde. Innerhalb Ihres Plugins können Sie durch die Verwendung von C.3 Komprimierung 345 this.prevObject Zugriff auf das vorangegangene jQuery-Objekt erhalten. Und wenn dieses vorangegangene Objekt ebenfalls einen Vorgänger hatte, können Sie auch auf diesen zugreifen! C.3 Komprimierung Wie Sie wissen, gibt es jeweils zwei Versionen von jQuery, jQuery UI und vielen Plugins: Eine unkomprimierte (uncompressed) und eine komprimierte (minified) Version. Warum ist das so? Egal, für welche Variante Sie sich entscheiden: Wenn Sie sie Ihrer Seite hinzufügen, erhalten Sie Zugriff auf alle enthaltenen Features. Der Unterschied besteht in der kleineren Dateigröße der ».min«-Version. Unkomprimiert kommt jQuery auf rund 250 KB, während die komprimierte Version unter 100 KB groß ist, was der Bandbreite zu Gute kommt. Wenn Ihr Server und die Browser Ihrer Besucher Gzipped-Dateien unterstützen (was die meisten heutzutage tun), kann dieser Wert nochmals halbiert werden. Und wenn die Datei nur halb so groß ist, kann sie doppelt so schnell übertragen werden. Schnellere Downloads bewirken schnelleren Seitenaufbau, sodass die Vorteile der »minified«-Varianten Ihrer Scripte und vor allem Plugins nicht zu übersehen sind. Zum Packen Ihrer Dateien gibt es eine Vielzahl von Utilities, von denen wir einige der meistverwendeten vorstellen möchten. JavaScript-«Minifier« sind wie Ebbe und Flut – während der letzten Jahre haben wir zahllose Utilities kommen und gehen sehen. Zwei alteingesessene Vertreter sind der YUI Compressor78 von Yahoo und der Closure Compiler79 von Google. Ein weiteres bedeutendes Tool ist UglifyJS80, welches das jQuery-Team selbst zum Komprimieren seiner Dateien verwendet. Beide Tools eliminieren Leerzeichen und kürzen Variablen- und Funktionsnamen ab. Der Code wird dabei aus menschlicher Sicht nahezu unlesbar, doch die JavaScriptEngine des Browsers hat keinerlei Probleme damit, ihn zu interpretieren. Folgender von Menschen lesbarer Code: $growl.animate({ border: "none", height: 0, marginBottom: 0, marginTop: "-6px", opacity : 0, paddingBottom: 0, paddingTop: 0, queue: false }); 78 79 80 http://developer.yahoo.com/yui/compressor/ http://code.google.com/closure/compiler/ https://github.com/mishoo/UglifyJS 346 Anhang C: Plugin-Helfer … wird in diesen Code übersetzt: $growl.animate({border:"none",height:0,marginBottom:0,marginTop: ➥"-6px",opacity :0,paddingBottom:0,paddingTop:0,queue:false} Beim zweiten Statement wurden die Leerzeichen entfernt, und Sie können auf den ersten Blick erkennen, dass es wesentlich weniger Platz bei gleicher Funktionalität beansprucht. Und natürlich erkennen Sie auch, dass die Lesbarkeit erheblich gelitten hat. Multiplizieren Sie diese Zeile mit den im jQuery-Source-Code vorhandenen 9000 weiteren, und Sie können sich vorstellen, wie verwirrend das Endergebnis aussehen wird. Und das, obwohl keinerlei Namen verändert wurden. Welchen Minifier Sie verwenden, hängt stark von Ihrer Entwicklungsumgebung und Ihrem Workflow ab. Sowohl der Closure Compiler als auch der YUI Compressor sind Java-Applikationen, die von der Kommandozeile aus aufgerufen werden können. UglifyJS wurde in JavaScript verfasst und läuft auf Node.JS. Der Overhead pro Durchlauf ist bei Node wesentlich geringer als bei der Java Virtual Machine, was an Bedeutung gewinnt, wenn Sie viele einzelne Dateien komprimieren möchten. Egal für welche Alternative Sie sich entscheiden – die Vorgehensweise bei der Kompression ist stets dieselbe. Beispiel: Eine Datei wie hello.js komprimieren Sie mit Closure Compiler wie folgt: java -jar compiler.jar --js hello.js --js_output_file ➥hello-compiled.js Dies können Sie in Ihren Entwicklungsprozess integrieren, sodass Sie automatisch über komprimierte und unkomprimierte Versionen Ihres aktuellen Codes verfügen. Wenn Sie nur einen Durchlauf wünschen oder sich für die Funktionsweise von Minifizierern interessieren, können Sie auch die Online-Version des Closure Compiler81 ausprobieren und den Code durch Drücken auf »Compile« komprimieren lassen. Am Ende ist es Ihre Entscheidung, welcher Minifier am ehesten Ihren persönlichen Anforderungen entgegenkommt. Die Autoren dieses Buchs bevorzugen übrigens UglifyJS! Einige Vertreter produzieren geringfügig kleinere Dateien, andere kompilieren den Code schneller. Eines haben sie alle gemeinsam: Sie werden stets verfeinert und aktualisiert, wobei die Entwickler stets ein offenes Ohr für das Feedback der Community haben. 81 http://closure-compiler.appspot.com/ 347 Stichwortverzeichnis Symbole !==-Operator 340 !=-Operator 340 $(document).ready() 32 $.ajax-Optionen 329 $.ajaxSetup 190 $.each 182 $.get 178 $.getJSON 174, 195 $.getScript 177 $.inArray 254 $.map 254 $.post 178, 196 $.support-Optionen 333 $-Funktionen 292 *-Operator 339 :checked 201 :password 201 :selected 201 ||-Operator 156 +-Operator 339 ===-Operator 340 ==-Operator 340 =-Operator 340 A accepts 330 Accessible Rich Internet Applications 223 Accordion 139 Accordion-Menü 135, 140 add 344 addClass 41 addHandlers 221 ajax 333 Ajax 159, 168, 180 Fehlerbehandlung 189 Ajax-Calls 177 Ajax-Einstellungen 177 Ajax-Ereignisse 179 ajaxError 179, 192 ajaxSend 180 ajaxStart 180, 186 ajaxStop 180, 186 ajaxSuccess 180 Ajax-Widgets 164 always 178, 180 animate 57, 62, 234, 310 Animationen 50, 309 Animations-Warteschlange 65 Animieren 57 Anonyme Funktionen 52 appendTo 48, 152 ARIA 223 Assignment Operator 340 async 329 Attribut-Selektor 76 Ausblenden 50 Auswahl 32, 33, 35 Auswahl invertieren 260 Auswahlmethoden 221 Autocomplete-Plugin 215 autoFill 216 B Baum expandierbarer 262 Baumstrukturen 262 beforeSend 180, 184, 332 Benachrichtigungen 244 Bereichsteiler 83 Bilder 89 Bilder zuschneiden 97 Bildergalerie 183 Bildpräsentation 71 bind 300, 303, 305, 307 blur 202, 209, 211 Bounce-Animation 64 boxModel 334 Browser 18, 77, 336 Browser Sniffing 167, 333 Buttons 223 C cache 145, 329 call 289 Callback-Funktionen 51 Callbacks 248, 287, 289, 332 CDN 23, 24 Chaining 29, 66, 212 change 202 changeBubbles 334 Checkboxen 209, 280 checkClone 334 checkOn 334 class-Attribut 41 class-Selektor 34 click 300 click-Event 147, 211, 222 click-Funktion 164 click-Handler 128 clone 166, 240, 271 closeDialog 241 closest 247 Closure 163 Code strukturieren 161 ColorBox 94, 95 complete 184 complete-Handler 332 console.log 93 348 Stichwortverzeichnis Content Delivery Network 23 Content Distribution Network 24 contents 214, 331 contentType 331 context 189, 254, 331, 343 converters 331 cors 334 crossDomain 330 Cross-Fading 100, 104, 106 CSS 37 CSS3-Selektoren 18 CSS-Animationen 59 CSS-Eigenschaften 37, 57 cssFloat 334 currentTarget 336 Cycle-Plugin 111 D data 117, 281, 311, 331, 336 dataFilter 333 data-Parameter 307 data-role 320 DataTables 279 dataType 193, 331 Datenquellen 164 Datenraster 272 Datentyp 193 Datenzugriff 255 Datumsauswahl 224 Datumsprüfung 226 Datumswähler 71, 224, 226 Dekrement 192 Dialogbox 153, 239, 241 Dialoge 153, 199, 238, 241 die 173 disableSelection 236 display 100 DIY-Ereignis-Objekte 337 Document Object Model 17, 29 Documentready-Event 32 DOM 17, 29 done 178, 180 Drag and Drop 71, 229 F fadeIn 51 fadeOut 51, 234 fail 178, 179 E false 296, 341 each 269 Falsiness 341 each-Schleife 155 falsy 296, 341 Easing 60, 61 Farbanimationen 59 Effekte 42, 232 Feature Detection 333 Eigene Ereignisse 300 Feature-Erkennung 168 Eigene Selektoren 299 Feldbezeichnungen 208 Einblenden 50 filter 137, 255, 261 Einstellungen 330 Filter 36, 200 Elemente Firebug 40, 94 aufdecken 42 Flags 329 ausblenden 44, 50 Flash 67 einblenden 44, 50 Flexible Aktionen 43 entfernen 49 focus 209 skalierbare 81 Formulardaten 195 verbergen 42 Formulare 199 versteckte 43 Formularvalidierung 200 empty 212 for-Schleife 155 enableSelection 236 Fortschrittsbalken 237 end 344 Fotogalerie 181 Equality Operator 340 Funktionen 332 Ereignisaktionen 129 verschachtelte 276 Ereignisbehandlungsroutinen fx 145 42 fx-Stapel 310 Ereignisdelegation 128 Ereignis-Delegierung 265 G Galerie 95, 115, 181, 312 Ereignis-Eigenschaften 336 GET-Anfrage 172, 178 Ereignis-Methoden 336 getElementsByClassName 200 Ereignisse 300, 336 Github 26 eigene 300 Gleichheits-Operatoren 340 nichtstandardisierte 305 global 330 error-Handler 332 Google Chrome Developer event 152 Tools 40 Event Handler 42, 123, 221, Google Content Distribution 303 Network 24 Event Namespacing 303 Growl-Stil 244 Event Propagation 128 Gültigkeitsbereich 163 Event Unbinding 303 Event-Parameter 123 H extend 290, 293 headers 331 Externe Scripts 177 draggable 230, 231 Drop-down-Menüs 132 droppable 230, 232 Stichwortverzeichnis hide 45 Higher Order Functions 255 Hijax 169 hover 53, 68, 101, 131, 135, 151, 211, 222 Hover Intent 134 Hover-Handler 155 hoverIntent 135 Hovern 52, 150 hrefNormalized 334 html 50 htmlSerialize 334 Hyperlinks 169 I id-Selektor 34 IE6-Unterstützung 158, 314 ifModified 330 if-Statement 44 Image Tagging 192 index 256, 281 Indikatoren 186 Inequality Operator 340 Inhaltsbereiche 63 aufklappende 63 Inkrement 192 Inline-Bearbeitung 210 Inline-Validierung 202, 204, 206 InnerFade 109 input 202 insertAfter 47 insertBefore 47, 54 Interaktivität 159, 180 Internet Explorer 6 158, 314 isDefaultPrevented 336 isImmediatePropagation Stopped 336 isLocal 330 isPropagationStopped 336 J JavaScript 17, 23, 339 JavaScript-Objekte 311 JavaScript-Timer 102 JavaScript-Tooltips 150 JavaScript-Variablen 86 Jcrop 97 jQuery Alias 27 demaskieren 342 einbinden 24 erweitern 290 herunterladen 23 Kürzel 27 Script 27 jQuery Mobile 316 jQuery Templates 167 jQuery UI 19, 140, 143, 235, 251 jQuery.support 19 jQuery-Objekte 311 jQuery-Stapel 344 jQuery-Statement 28 jQuery-UI-Bibliothek 61, 71 jQuery-UI-Dialog 241 jQuery-Widgets 71 JSON 174, 176, 193 jsonp 331 JSONP-Aufrufe 331 jsonpCallback 333 jsRender-Projekt 167 K Kalender 224 keypress-Event-Handler 207 Kind-Selektor 64 Klassen 40 Kommentare 160 Komprimierung 345 Kontext 164, 343 Kontrollelemente 146, 199, 222 Kopfzeilen 267, 270 L Layout-Switcher 80 leadingWhitespace 334 Lightbox 89 Listen 251 349 Listen sortieren 256 Listenelemente 258 Listen-Objekte Mehrfachauswahl 252 live 173 load 169, 170, 172, 191, 289 locationData 311 locator 311 Login-Formular 146 Logische Operatoren 156 M map 255 Markup 21 matchContains 216 Mehrfachauswahl 251 Mehrfachselektoren 36 Meldungen 238 Menüs 125 Accordion- 135 ausklappen 131 browserübergreifende 132 einklappen 131 expandierende 125 geschlossene 130 Indikatoren 130 offene 130 Menüsektion 130 meta 318 Methoden hinzufügen 290 Mime-Typ 331 mimeType 331 Miniaturen 113 Modale Dialoge 239 Modulus 107, 220 mousedown 306 mousemove 151 mouseout 52, 71, 304 mouseover 52, 71, 134, 173, 300, 304 mouseup 306 Multiplikations-Operator 339 Mustache Templates 167 350 Stichwortverzeichnis N Nachrichtenelemente 247 Namensraum 161, 305, 308 Namespacing 303 Navigation animierte 67, 70 Navigationskontrolle 126 Navigationsleiste 75, 142 News-Ticker 109 next 55 Nichtstandardisierte Ereignisse 305 Nightlies 26 noCloneEvent 335 noConflict 308 null 296 O Objekt-Literal 39 off 172 on 172, 241 one 285 opacity 168, 335 openDialog 240 Operatoren Logische 156 optDisabled 335 optSelected 335 Overlay 147 P pageX 337 pageY 337 Paginierung 273 Panels 125, 146 Panes 146 password 332 Performance-Probleme 210 Plugin Repository 20, 59 Plugins 20, 59, 61, 109, 204, 215, 279, 283, 343 position 68, 100 POST-Anfrage 172, 178 prependTo 48 prev 55, 147 preventDefault 129, 336 processData 330 Promises 178 prop 260, 261 prototype 284 proxy 164 Prozess-Indikator 186, 187 pushStack 344 Q qSA 200 querySelectorAll 200 queue 310 Quick Element Construction 92 R Radiobutton 218 rapture 214 Rauchwolken-Effekt 232 relatedTarget 336 Remote-HTML 169 remove 49, 212 removeClass 42 replaceWith() 214 Reset-Methode 191 resize 79 result 216 Rollover 100 S Schieberegler 226 Schlüssel/Wert-Paare 160 Scope 163 scriptCharset 332 scriptEval 335 scroll 73 Scrollen 57, 73, 117 Scroll-Galerie 115 Scrolling endloses 187 Scrollleisten benutzerdefinierte 78 scrollTo 77, 115 selectable 252, 253 selector 343, 344 Selektieren 32 Selektoren 171, 343 eigene 299 serialize 195 Serverlatenz 186 setDialogs 157 setInterval 102 setTimeout 102, 184, 234 show 45 Site-Navigation 125 Skalieren 57, 79 slice 275, 281 slideDown 51 slider 226, 325 Slideshow 89, 100, 104 scrollende 112 Slideshow-Widget 118 slideToggle 51 slideUp 51, 311 sort 258 sortable 235 special 306 spinner 145 Spinner 185, 186 Sprechblasen 245 Sprechblasen-Design 153 Standard-Ereignisaktionen 129 statusCode 332 Sterne-Bewertung 217 stopImmediatePropagation 336 stopPropagation 129, 336 Strict Equality Operator 340 Strict Inequality Operator 340 Struktur 159 Strukturierung 159 style 335 submit 204 submitBubbles 335 success 182, 184 Stichwortverzeichnis success-Handler 332 Suckerfish-Drop-Down 132 support 333, 335 support-Utility 19 T Tabellen 251, 267 Tabellenkopfzeilen 267, 270 Tab-Kontrolle 145 Tab-Optionen 144 Tabs 125, 141, 143 target 336 tbody 335 template 166 Templating 164, 166 Templating-Systeme 166 Ternary-Operator 105 text 50, 310 textarea 82, 202, 207, 212 Textbox 212 Texteingaben 202 thead 267 Theme Rolling 312 ThemeRoller 312 Themes 283, 313, 314 this 43 timeout 190, 332 Timeout 190 Timer 102, 103, 104 timeStamp 336 toggle 45, 300 toggle-Aktion 51 toggleClass 53, 265 Tooltips 125, 150, 153 Touch-Ereignisse 305 Touchscreen-Interaktionen 305 touchstart 305 traditional 330 Traversieren 36 trigger 212, 300 trim 294 Troubleshooting 93 true 296, 341 Truthiness 341 truthy 296, 341 Twitter 175 type 332, 336 U Überblendung 100, 104, 109 unbind 303 Unbinding 303 undefined 296 url 332 Usereingabe 351 Maximallänge 206 username 332 Utility-Funktionen 288 V val 201 Validation-Plugin 204 Variablen 339 numerische 192 Verkettung 29 Vervollständigen 215 Videospiel-Retro 247 W Warenkorb 148, 165 Warteschlangen 309 which 336 Widget 120 X xhrFields 332 xhr-Funktion 333 XML-Daten 192 XMLHTTPRequest 179, 333 Z z-index 106 Zufallszahlen 117 60173-3 U1+U4 29.05.12 14:45 Seite 1 Aus dem Inhalt: • Sich in jQuery verlieben • Selektieren: Das Herz von jQuery jQuery Vom Novizen zum Ninja jQuery ist die beliebteste JavaScript-Klassenbibliothek! Als Programmierer sparen Sie enorm viel Zeit durch den Einsatz von jQuery. Hier erfahren Sie, wie Sie mit jQuery • Grundlegende Animationen und Effekte: Verbergen und Aufdecken, Ein- und Ausblenden • Animieren, Scrollen und Skalieren • Bilder und Slideshows, Lightbox • Expandierende Menüs, Accordion-Menüs • Tabs, Tooltips und Panels • Struktur, Ajax und Interaktivität Ihrer Website beeindruckende Animationen und besondere • Formulare, Kontrollelemente und Dialoge Interaktivität verleihen können. Auch jQuery Mobile und • Listen, Baumstrukturen und Tabellen der Unterstützung mobiler Geräte ist ein eigenes Kapitel • Plugins und fortgeschrittene Techniken gewidmet. Lernen Sie mit diesem Buch die fortgeschrittenen • Theme Rolling Techniken und werden Sie zum echten jQuery-Ninja! • jQuery Mobile 씰 Animationen und Bildergalerien mit jQuery Wer die Besucher seiner Website beeindrucken will, wird an den Animationen seine Freude haben, die mit jQuery über wenige Zeilen Code erstellt werden können. Auch die Erstellung von Slideshows, einer Lightbox, Bild-Miniaturübersichten und überblendbaren Bildergalerien wird hier gezeigt. 씰 Formulare und Dialoge Die Erstellung von Formularen ist oft eine lästige Aufgabe, aber auch hier hilft jQuery. Nicht nur die Erstellung wird wesentlich einfacher – Sie lernen auch, wie Sie Formulare blitzschnell validieren, dem Anwender Über die Autoren: Earle Castledine (aka Mr Speaker) ist als bekannter JavaScript- und jQuery-Experte weltweit an Entwicklungen beteiligt und auf internationalen Konferenzen zu Web-Themen mit Vorträgen vertreten. Unterstützung anbieten und Elemente wie Checkboxen, Radio Buttons oder Auswahllisten einsetzen. Dazu kommen Interaktionsmöglichkeiten wie Datumswähler, Schieberegler und Drag and Drop. 씰 Plugins, Themes und fortgeschrittene Techniken Über die Benutzung der üblichen UI-Komponenten hinaus bietet jQuery eine fantastische Plugin-Architektur. In einem eigenen Abschnitt wird verraten, wie Plugins erstellt werden und wie Sie sie grafisch an Ihre Vorstellungen anpassen. Know-how ist blau. Earle Castledine Craig Sharkie • CSS mit jQuery Craig Sharkie arbeitete als Programmierer für einige große Namen des Web, u. a. AOL, Microsoft und Yahoo. Sein Weg hat ihn vom Journalismus über die Beschäftigung als Entwickler und einige internationale Vorträge nun auch zur Tätigkeit als Buchautor geführt. Auf www.buch.cd jQuery Vom Novizen zum Ninja Earle Castledine Craig Sharkie Castledine Sharkie Web-Entwicklung jQuery Vom Novizen zum Ninja > Das JavaScript-Framework professionell einsetzen > Interaktive Elemente in Webseiten integrieren > Eindrucksvolle Animationen mit wenigen Zeilen Code erstellen Der komplette Quellcode des Buches. Scripte zum sofortigen Einsatz. Besuchen Sie unsere Website www.franzis.de 30,– EUR [D] ISBN 978-3-645-60173-3 Profi-Wissen für alle jQuery-User