Spis tre ci
Transkrypt
Spis tre ci
Spis treci Przedmowa 11 O autorach 13 O korektorach 15 Wprowadzenie 17 Rozdzia 1. Pocztki 23 Co robi jQuery Dlaczego jQuery dziaa dobrze Historia projektu jQuery Nasza pierwsza strona z jQuery Pobranie jQuery Utworzenie dokumentu HTML Dodanie jQuery Gotowy produkt Podsumowanie Rozdzia 2. Selektory DOM Funkcja fabryczna $() Selektory CSS Stylizacja poziomów zagniedenia listy Selektory atrybutów Stylizacja odnoników Wasne selektory Stylizacja co drugiego wiersza Selektory formularzy 23 25 26 27 27 27 30 33 33 35 35 36 37 38 40 40 42 42 45 Spis treci Metody przechodzenia drzewa DOM Stylizacja wybranych komórek czenie w acuch Dostp do elementów DOM Podsumowanie Rozdzia 3. Zdarzenia Wykonywanie zada w momencie zaadowania strony Czas wykonania kodu Wiele skryptów na jednej stronie Skróty poprawiajce zwizo kodu Wspóistnienie z innymi bibliotekami Proste zdarzenia Prosty przecznik stylów Skrótowa obsuga zdarze Zdarzenia zoone Pokazywanie i ukrywanie zaawansowanych opcji Wyrónianie elementów, które mona klikn Podró zdarzenia Efekty uboczne propagacji zdarze Zmiana podróy — obiekt zdarzenia Element docelowy zdarzenia Zatrzymanie propagacji zdarze Dziaania domylne Delegacja zdarze Usuwanie programu obsugi zdarze Przestrzenie nazw zdarze Ponowne dowizanie zdarzenia Symulacja interakcji z uytkownikiem Zdarzenia klawiatury Podsumowanie Rozdzia 4. Efekty Modyfikacja CSS w locie Proste ukrywanie i pokazywanie Efekty a szybko Przyspieszanie Pojawianie si i znikanie Efekty zoone Tworzenie wasnych animacji Przeczanie znikania Animacja z uyciem wielu waciwoci Efekty jednoczesne a kolejkowane Praca z jednym zbiorem elementów Praca z wieloma zbiorami elementów Funkcje zwrotne W skrócie Podsumowanie 4 45 46 48 48 49 51 51 51 52 53 54 55 55 63 64 64 66 67 69 70 71 71 72 72 75 75 76 78 79 81 83 83 87 90 90 91 91 93 94 94 97 97 100 102 104 104 Spis treci Rozdzia 5. Edycja drzewa DOM Edycja atrybutów Atrybuty inne od klas Jeszcze raz funkcja fabryczna $() Wstawianie nowych elementów Przenoszenie elementów Oznaczenie, ponumerowanie i utworzenie odnonika do kontekstu Dodanie przypisów dolnych Opakowanie elementów Kopiowanie elementów Klonowanie ze zdarzeniami Klonowanie cytatów wyrzuconych Nieco o CSS Powrót do kodu Upikszenie cytatów wyrzuconych Metody edycji drzewa DOM w skrócie Podsumowanie Rozdzia 6. Ajax adowanie danych na danie Dodawanie kodu HTML Praca z obiektami JavaScriptu adowanie dokumentu XML Wybór formatu danych Przekazywanie danych do serwera Wykonanie dania GET Wykonanie dania POST Serializacja formularza ledzenie dania Ajax a zdarzenia Ograniczenia w zakresie bezpieczestwa Wykorzystanie JSONP dla danych zewntrznych Dodatkowe opcje Niskopoziomowa metoda Ajaksa Modyfikacja opcji domylnych adowanie czci strony HTML Podsumowanie Rozdzia 7. Przetwarzanie tabel Sortowanie i podzia na strony Sortowanie po stronie serwera Sortowanie za pomoc JavaScriptu Paginacja po stronie serwera Paginacja w JavaScripcie Gotowy kod 105 105 106 108 110 111 115 117 119 120 121 121 122 122 125 126 128 129 130 131 134 141 144 145 146 149 150 152 155 156 157 158 159 159 160 162 165 166 166 167 183 185 190 5 Spis treci Modyfikacja wygldu tabeli Wyrónianie wierszy Podpowiedzi Zwijanie i rozwijanie czci tabeli Filtrowanie Gotowy kod Podsumowanie Rozdzia 8. Formularze i ich funkcje 192 192 199 205 207 212 215 217 Ulepszenie prostego formularza Progresywne ulepszanie stylu formularzy Pola wywietlane warunkowo Sprawdzanie poprawnoci formularza Edycja pól wyboru Gotowy kod Zwize formularze Tekst pojemnika na pola formularza Autouzupenianie oparte na Ajaksie Gotowy kod Praca z danymi liczbowymi formularza Struktura tabeli koszyka z zakupami Odrzucanie danych nieliczbowych Obliczenia arytmetyczne Usuwanie elementów Edycja informacji o wysyce Gotowy kod Podsumowanie 217 218 224 227 234 237 239 239 242 250 253 253 256 256 263 267 270 272 Rozdzia 9. Rotacja i przesuwanie elementów 273 Rotacja wiadomoci Konfiguracja strony Pobieranie wiadomoci z kanau RSS Konfiguracja rotacji elementów Funkcja rotacji wiadomoci Pauza po najechaniu mysz Pobieranie wiadomoci RSS z innej domeny Gradientowy efekt blaknicia Gotowy kod Karuzela obrazków Konfiguracja strony Przesuwanie obrazków po klikniciu Powikszanie obrazków Gotowy kod Podsumowanie 6 274 274 276 279 280 282 285 286 289 290 291 294 301 313 316 Spis treci Rozdzia 10. Wykorzystywanie dodatków Znalezienie dodatku i uzyskanie pomocy Jak korzysta z dodatku Dodatek Form Wskazówki i sztuczki Biblioteka dodatków jQuery UI Efekty Komponenty interakcji Widety ThemeRoller w jQuery UI Inne polecane dodatki Formularze Tabele Obrazki Ramki z obrazkami i okna dialogowe Wykresy Zdarzenia Podsumowanie Rozdzia 11. Tworzenie dodatków Dodawanie nowych funkcji globalnych Dodanie wikszej liczby funkcji Jaki to ma sens? Tworzenie nowej metody pomocniczej Dodawanie metod obiektu jQuery Kontekst metody obiektu czenie metod w acuchy Metody przechodzenia drzewa DOM Dodawanie nowych metod skrótów Parametry metod Proste parametry Tablice asocjacyjne parametrów Domylne wartoci parametrów Funkcje zwrotne Dostosowywanie wartoci domylnych Dodanie wyraenia selektora Podzielenie si dodatkiem ze wiatem Konwencje nazewnictwa Uycie aliasu $ Interfejsy metod Styl dokumentacji Podsumowanie Dodatek A róda internetowe Dokumentacja jQuery Wiki jQuery jQuery API 317 317 318 319 320 321 322 324 326 329 330 330 332 334 335 338 339 340 341 341 342 343 344 345 346 348 349 353 356 358 359 360 361 362 364 367 367 367 368 368 368 369 369 369 369 7 Spis treci Przegldarka jQuery API Visual jQuery Przegldarka jQuery API w formacie Adobe AIR Informacje o JavaScripcie Mozilla developer center Dev.opera MSDN JScript Reference Quirksmode JavaScript Toolbox Kompresory kodu w JavaScripcie YUI Compressor JSMin Pretty printer Informacje o (X)HTML Strona hipertekstowego jzyka znaczników W3C Informacje o CSS Strona kaskadowych arkuszy stylów W3C cigawka CSS Mezzoblue Position is everything Przydatne blogi Blog jQuery Learning jQuery Ajaxian John Resig JavaScript Robert’s talk Web standards with imagination Snook Strona Matta Snidera o JavaScripcie I can’t DOM scripting As days pass by A List Apart Platformy do programowania internetowego korzystajce z jQuery Dodatek B Narzdzia programistyczne Narzdzia dla przegldarki Firefox Firebug Pasek narzdzi Web Developer Venkman Regular Expressions Tester Narzdzia dla przegldarki Internet Explorer Microsoft Internet Explorer Developer Toolbar Microsoft Visual Web Developer DebugBar Drip 8 370 370 370 370 370 370 371 371 371 371 371 372 372 372 372 372 373 373 373 373 373 374 374 374 374 374 374 375 375 375 375 375 375 376 377 377 377 378 378 378 378 379 379 379 379 Spis treci Narzdzia dla przegldarki Safari Programowanie Menu Inspektor www Narzdzia dla przegldarki Opera Dragonfly Inne narzdzia Firebug Lite NitobiBug Pakiet jQuery dla edytora TextMate Charles Fiddler Aptana 380 380 380 380 380 381 381 381 381 381 382 382 Dodatek C Domknicia w JavaScripcie 383 Funkcje wewntrzne Wielka ucieczka Zakresy zmiennych Interakcje midzy domkniciami Domknicia w jQuery Argumenty $(document).ready() Programy obsugi zdarze Zagroenia wynikajce z wycieku pamici Przypadkowe ptle odwoania Problem z wyciekiem pamici w przegldarce Internet Explorer Dobra wiadomo Podsumowanie Dodatek D Podrczne informacje Wyraenia selektorów Metody przechodzenia drzewa DOM Metody zdarze Metody efektów Metody edycji drzewa DOM Metody Ajaksa Pozostae metody Skorowidz 384 385 386 388 389 389 390 392 393 394 395 395 397 397 399 400 403 404 406 407 409 9 1 Pocztki Dzisiejszy Internet to dynamiczne rodowisko, a jego uytkownicy wysoko stawiaj poprzeczk, zarówno jeli chodzi o styl, jak i o funkcje stron internetowych. By móc tworzy interesujce i interaktywne witryny, programici sigaj po biblioteki JavaScriptu, takie jak jQuery, które pomagaj im automatyzowa czsto wykonywane zadania i upraszcza te bardziej skomplikowane. Jednym z powodów, dla których biblioteka jQuery cieszy si takim powodzeniem, jest to, e jest w stanie wspomóc programist w wielu rónych zadaniach. Waciwie trudno jest zadecydowa, od czego zacz, poniewa jQuery ma tyle rónych funkcji. Mimo to struktura biblioteki jest bardzo spójna i symetryczna — wikszo jej koncepcji zapoyczono z projektów takich, jak HTML i kaskadowe arkusze stylów (CSS). Sama struktura biblioteki uatwia zaczcie pracy projektantom z niewielkim dowiadczeniem programistycznym, poniewa wielu twórców stron internetowych ma o wiele wiksze dowiadczenie z HTML i CSS ni z JavaScriptem. Ju w pierwszym rozdziale ksiki napiszemy zreszt w jQuery dziaajcy program skadajcy si z trzech wierszy kodu. Z drugiej strony równie dowiadczeni programici skorzystaj na tej konceptualnej spójnoci, o czym przekonamy si w dalszych, bardziej zaawansowanych rozdziaach. Przyjrzyjmy si zatem temu, co moe dla nas zrobi jQuery. Co robi jQuery Biblioteka jQuery udostpnia ogólny poziom abstrakcji sucy do tworzenia skryptów na potrzeby czsto spotykanych zada, dziki czemu przydatna jest w niemal kadej sytuacji wymagajcej napisania skryptu. Rozszerzalna natura biblioteki oznacza, e nigdy nie udaoby nam si opisa wszystkich jej moliwych zastosowa i funkcji w jednej ksice, poniewa dodatki cigle s tworzone, dokadajc nowe moliwoci. Najwaniejsze funkcje jdra biblioteki s jednak nastpujce: jQuery 1.3. Wprowadzenie Q Uzyskanie dostpu do elementów dokumentu. Bez biblioteki JavaScriptu przejcie drzewa DOM (ang. Document Object Model) i lokalizacja wybranych czci struktury dokumentu HTML wymaga napisania wielu wierszy kodu. jQuery oferuje rozbudowany i wydajny mechanizm selektorów sucy do pobierania fragmentu dokumentu, który ma by przejrzany lub zmodyfikowany. Q Modyfikowanie wygldu strony internetowej. CSS oferuje metod wpywania na sposób wywietlania dokumentu, jednak na niewiele si przydaje, kiedy nie wszystkie przegldarki obsuguj te same standardy. Dziki jQuery programici s w stanie wypeni t luk, polegajc na obsudze tych samych standardów we wszystkich przegldarkach. Dodatkowo jQuery jest w stanie modyfikowa klasy lub pojedyncze waciwoci stylu zastosowane do czci dokumentu nawet po wygenerowaniu strony. Q Zmiana zawartoci dokumentu. jQuery nie ogranicza si jednak do zmian czysto kosmetycznych — jest w stanie zmodyfikowa zawarto samego dokumentu za pomoc kilku nacini klawiatury. Mona zmienia tekst, wstawia lub podmienia obrazki, zmienia kolejno list lub przepisa bd rozszerzy ca struktur HTML — wszystko za pomoc jednego, atwego w uyciu API (ang. Application Programming Interface). Q Reagowanie na interakcj z uytkownikiem. Nawet najbardziej wyszukane dziaania nie s szczególnie przydatne, jeli nie moemy kontrolowa tego, kiedy nastpuj. Biblioteka jQuery oferuje elegancki sposób przechwytywania rónego rodzaju zdarze — takich jak kliknicie odnonika przez uytkownika — bez koniecznoci zamiecania kodu HTML programami obsugi zdarze. Jednoczenie API suce do obsugi zdarze likwiduje niezgodnoci midzy przegldarkami, które s dla programistów internetowych prawdziw katorg. Q Animacja zmian wprowadzanych do dokumentu. By efektywnie implementowa tego typu dziaania interaktywne, projektant musi da uytkownikowi jakie wizualne informacje zwrotne. Biblioteka jQuery umoliwia to, udostpniajc wiele efektów (takich jak blaknicie czy animowane przejcia), a take suc jako narzdzie do tworzenia nowych efektów. Q Pobieranie informacji z serwera bez odwieania strony. Ten wzorzec kodu znany jest jako Ajax (od Asynchronous JavaScript and XML) i wspomaga programistów w tworzeniu bogatych w moliwoci oraz reagujcych na dziaanie uytkownika stron. Biblioteka jQuery likwiduje z tego procesu cz zwizan z rónicami midzy poszczególnymi przegldarkami, pozwalajc programistom na skupienie si na funkcjonalnoci po stronie serwera. Q Uproszczenie czsto spotykanych zada wykonywanych za pomoc JavaScriptu. Oprócz wszystkich moliwoci jQuery zwizanych z obsug dokumentów biblioteka ta udostpnia take ulepszenia dla podstawowych konstrukcji jzyka JavaScript, takich jak iteracja i modyfikacja tablic. 24 Rozdzia 1. • Pocztki Dlaczego jQuery dziaa dobrze Wraz ze wzrostem zainteresowania dynamicznym HTML pojawio si mnóstwo bibliotek i platform opartych na JavaScripcie. Niektóre z nich s wyspecjalizowane i skupiaj si tylko na jednym bd dwóch z wymienionych wyej zada. Inne staraj si skatalogowa wszystkie moliwe dziaania i animacje, udostpniajc je jako gotowy pakiet. By zachowa szerok gam moliwoci przedstawionych powyej, ale te niewielki rozmiar, jQuery przyjmuje kilka strategii: Q Wykorzystanie znajomoci CSS. Opierajc mechanizm lokalizacji elementów strony na selektorach CSS, jQuery dziedziczy zwizy, a jednoczenie czytelny sposób wyraania struktury dokumentu. Biblioteka jQuery staje si punktem wyjcia dla projektantów, którzy chc dodawa do swych stron rónorodne dziaania, gdy znajomo skadni CSS jest podstaw zawodowego tworzenia witryn internetowych. Q Obsuga dodatków. W celu uniknicia przeadowania funkcjami jQuery przenosi specjalne zastosowania do dodatków. Metoda tworzenia nowych dodatków jest prosta i dobrze udokumentowana, co pobudzio rozwój duej liczby pomysowych i przydatnych moduów. Nawet w podstawowym pliku jQuery wikszo opcji wewntrznie korzysta z architektury dodatków, dziki czemu mona je w miar potrzeby usun, uzyskujc jeszcze mniejsz bibliotek. Q Abstrakcja niezgodnoci midzy przegldarkami. Tragedi programistów stron internetowych jest to, e kada przegldarka ma swój wasny zbiór odchyle od opublikowanych standardów. Znaczna cz procesu tworzenia kadej aplikacji internetowej przypada na obsug tych samych funkcji w inny sposób dla kadej z platform. Cho cigle ewoluujcy wiat przegldarek sprawia, e w przypadku bardziej zaawansowanych funkcji stworzenie podstaw kodu cakowicie neutralnych dla przegldarki jest niemoliwe, jQuery dodaje poziom abstrakcji normalizujcy czsto wykonywane zadania, zmniejszajcy wielko kodu i znacznie go upraszczajcy. Q Praca ze zbiorami. Kiedy nakazujemy jQuery odnalezienie wszystkich elementów klasy collapsible, a nastpnie ukrycie ich, nie ma potrzeby wykonywania ptli po kadym zwracanym elemencie. Zamiast tego metody takie jak .hide() zaprojektowano w taki sposób, by automatycznie dziaay na zbiorze obiektów, a nie tylko na pojedynczych obiektach. Technika ta, zwana niejawn iteracj, oznacza, e wiele konstrukcji ptli staje si zbdnych, co znacznie skraca kod. Q Zezwolenie na wiele dziaa w jednym wierszu. By unikn nadmiernego korzystania z tymczasowych zmiennych czy bezsensownego powtarzania, jQuery w wikszoci metod wykorzystuje wzorzec programowania zwany acuchem. Oznacza to, e wynikiem wikszoci dziaa na obiekcie jest sam obiekt, gotowy do zastosowania na nim kolejnych dziaa. Strategie te pozwalaj na utrzymanie niewielkiego rozmiaru pakietu jQuery — po skompresowaniu jest to poniej 20 KB — udostpniajc jednoczenie techniki umoliwiajce zachowanie zwizoci wasnego kodu korzystajcego z biblioteki. 25 jQuery 1.3. Wprowadzenie Elegancja biblioteki po czci jest cech samego projektu jQuery, a po czci efektem procesu ewolucyjnego pobudzanego przez aktywn spoeczno, która wytworzya si wokó projektu. Uytkownicy jQuery aktywnie omawiaj nie tylko rozwój dodatków, ale take ulepszenia samego jdra biblioteki. W dodatku A przedstawimy wiele zasobów dostpnych dla programistów korzystajcych z jQuery. Pomimo skali wysików niezbdnych do stworzenia tak elastycznego i rozbudowanego systemu produkt kocowy jest darmowy i dostpny dla kadego. Projekt ten dostpny jest na podwójnej licencji: GNU Public License (dziki czemu mona go doczy do wielu innych projektów open source) oraz MIT License (by uatwi zastosowanie jQuery w oprogramowaniu wasnociowym). Historia projektu jQuery Niniejsza ksika omawia funkcjonalno i skadni jQuery 1.3.x, najnowsz wersj dostpn w czasie jej pisania. Zaoenia lece u podstaw biblioteki — udostpnienie atwych sposobów odnajdywania elementów na stronie internetowej oraz modyfikowania ich — nie zmieniy si w trakcie jej rozwijania, cho zmienione zostay szczegóy skadni i dostpnych moliwoci. Poniszy krótki przegld historii projektu opisuje najwaniejsze zmiany pomidzy wersjami. Q Publiczne ogoszenie prac: John Resig po raz pierwszy wspomnia o poprawkach do biblioteki Prototype (czci „Behaviour”) w sierpniu 2005 roku. Nowa biblioteka zostaa oficjalnie opublikowana pod nazw jQuery 14 stycznia 2006 roku. Q jQuery 1.0 (sierpie 2006): ju pierwsze wydanie biblioteki miao rozbudowan obsug selektorów CSS, zdarze i interakcji opartych na Ajaksie. Q jQuery 1.1 (stycze 2007): to wydanie znacznie usprawnio API. Wiele rzadko wykorzystywanych metod zostao poczonych, co zmniejszyo cakowit liczb metod, które trzeba opanowa i udokumentowa. Q jQuery 1.1.3 (lipiec 2007): to pomniejsze wydanie zawierao ogromn popraw szybkoci dziaania silnika selektorów jQuery. Od tej wersji wydajno jQuery wypada bardzo korzystnie na tle podobnych bibliotek JavaScriptu, takich jak Prototype, Mootools oraz Dojo. Q jQuery 1.2 (wrzesie 2007): w wydaniu tym usunito skadni XPath suc do wybierania elementów, gdy bya ona powtarzalna w stosunku do skadni CSS. Dostosowywanie efektów do wasnych potrzeb jest od tego wydania bardziej elastyczne; tworzenie dodatków stao si atwiejsze dziki wprowadzeniu zdarze z przestrzeni nazw. Q jQuery UI (wrzesie 2007): ogoszono powstanie nowego zbioru dodatków, który mia zastpi popularny, jednak starzejcy si dodatek Interface. Obejmowa on bogat kolekcj gotowych widetów, a take zbiór narzdzi sucych do budowania bardziej zaawansowanych elementów, takich jak interfejsy oparte na zasadzie „przecignij i upu”. 26 Rozdzia 1. • Pocztki Q jQuery 1.2.6 (maj 2008): funkcjonalno popularnego dodatku Brandona Aarona o nazwie Dimensions zostaa doczona do jdra biblioteki. Q jQuery 1.3 (stycze 2009): powana przebudowa silnika selektorów (Sizzle) ogromnie poprawia wydajno biblioteki. Oficjalnie obsugiwana jest równie delegacja zdarze. Informacje o starszych wersjach jQuery mona znale na stronie internetowej projektu pod adresem: http://docs.jquery.com/History_of_jQuery. Nasza pierwsza strona z jQuery Skoro omówilimy ju moliwoci udostpniane przez jQuery, moemy teraz sprawdzi, jak mona wykorzysta t bibliotek w praktyce. Pobranie jQuery Oficjalna strona internetowa jQuery (http://jquery.com/) jest zawsze najlepszym adresem, pod którym mona znale aktualny kod i informacje dotyczce biblioteki. Na pocztek potrzebna jest nam kopia jQuery, któr mona pobra bezporednio na stronie gównej tej witryny. W kadym momencie dostpnych moe by kilka wersji jQuery — dla nas jako programistów stron internetowych najbardziej odpowiednia bdzie najnowsza nieskompresowana wersja biblioteki. W rodowisku produkcyjnym mona j zastpi wersj skompresowan. Nie jest wymagana adna instalacja. By uy jQuery, wystarczy umieci plik na naszej stronie internetowej, w publicznie dostpnym miejscu. Poniewa JavaScript jest jzykiem interpretowanym, nie musimy martwi si o faz kompilacji. Zawsze gdy bdziemy potrzebowa jQuery na stronie internetowej, bdziemy si po prostu odnosili do lokalizacji pliku z dokumentu HTML. Utworzenie dokumentu HTML Wikszo przykadów wykorzystujcych jQuery skada si z trzech elementów: samego dokumentu HTML, plików CSS nadajcych mu styl i plików JavaScriptu pozwalajcych wykonywa dziaania. W naszym pierwszym przykadzie wykorzystamy stron z fragmentem ksiki1; do czci kodu przypisano kilka klas. 1 W przykadzie wykorzystano fragment ksiki Po drugiej stronie lustra Lewisa Carrolla w tumaczeniu Roberta Stillera — przyp. tum. 27 jQuery 1.3. Wprowadzenie <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Po drugiej stronie lustra</title> <link rel="stylesheet" href="alice.css" type="text/css" media="screen" /> <script src="jquery.js" type="text/javascript"></script> <script src="alice.js" type="text/javascript"></script> </head> <body> <h1>Po drugiej stronie lustra</h1> <div class="author">autor: Lewis Carroll</div> <div class="chapter" id="chapter-1"> <h2 class="chapter-title">1. Dom odbity w lustrze</h2> <p>Na stole koo Alicji leaa ksika, wic kiedy tak siedziaa, obserwujc Biaego Króla (bo wci troch si o niego lkaa i trzymaa w pogotowiu atrament, eby go obla, gdyby jeszcze raz zemdla), przewracaa sobie kartki w poszukiwaniu czego, co by moga przeczyta: <span class="spoken">"bo wszystko to w jakim nieznanym jzyku!"</span> powiedziaa do siebie.</p> <p>Brzmiao to tak.</p> <div class="poem"> <h3 class="poem-title">IKAORBA</h3> <div class="poem-stanza"> <div>ywtrks eikbil ,ywatzsurm sazc yB</div> <div>,ypyriw czcreiw hcazaw aN</div> <div>ywtlgorob anc od egzim A</div> <div>.ypyzrgz yruzczsiw enmodz I</div> </div> </div> <p>Zastanawiaa si nad tym przez jaki czas, a bysna jej genialna myl. <span class="spoken">"Przecie to jest, oczywicie, Lustrzana Ksika! i jak na ni popatrz w Lustrze, to sowa znów bd takie, jak trzeba."</span></p> <p>I odczytaa nastpujcy wiersz:</p> <div class="poem"> <h3 class="poem-title">ABROAKI</h3> <div class="poem-stanza"> <div>By czas mrusztawy, libkie skrtwy</div> <div>Na wazach wierczc wirypy,</div> <div>A mizge do cna borogltwy</div> <div>I zdomne wiszczury zgrzypy.</div> </div> </div> </div> </body> </html> 28 Rozdzia 1. • Pocztki Ukad plików na serwerze nie ma znaczenia. Odwoania z jednego pliku do drugiego naley jedynie dostosowa tak, by pasoway do wybranego przez nas sposobu organizacji. W wikszoci przykadów w ksice w odwoaniach do plików wykorzystamy cieki wzgldne (../images/foo.png), a nie bezwzgldne (/images/foo.png). Pozwala to na lokalne uruchamianie kodu bez koniecznoci posiadania serwera WWW. Natychmiast po zwykym nagówku HTML adowany jest arkusz stylów. W tym przykadzie jest on wyjtkowo spartaski. body { font: 62.5% Arial, Verdana, sans-serif; } h1 { font-size: 2.5em; margin-bottom: 0; } h2 { font-size: 1.3em; margin-bottom: .5em; } h3 { font-size: 1.1em; margin-bottom: 0; } .poem { margin: 0 2em; } .highlight { font-style: italic; border: 1px solid #888; padding: 0.5em; margin: 0.5em 0; background-color: #ffc; } Po odwoaniu do arkusza stylów doczone zostaj pliki JavaScriptu. Istotne jest, by element script z bibliotek jQuery znajdowa si przed elementem script dla naszych wasnych skryptów. W przeciwnym razie biblioteka jQuery nie bdzie dostpna, kiedy nasz kod bdzie si próbowa do niej odwoa. W pozostaej czci ksiki drukowane bd jedynie istotne czci plików HTML i CSS. Pene pliki dostpne s na stronie internetowej ksiki pod adresem: http://helion.pl/ksiazki/jquer1.htm. Teraz nasza strona wyglda tak: 29 jQuery 1.3. Wprowadzenie Rysunek 1.1. Wykorzystamy teraz jQuery do nadania nowego stylu tekstowi wiersza. Przykad ten ma na celu zademonstrowanie prostego zastosowania jQuery. W rzeczywistoci ten typ stylizacji tekstu mona wykona za pomoc samego CSS. Dodanie jQuery Nasz kod umiecimy w drugim — obecnie pustym — pliku JavaScriptu, doczonym do dokumentu HTML za pomoc kodu <script src="alice.js" type="text/javascript"></script>. W tym przykadzie wystarcz nam trzy wiersze kodu: $(document).ready(function() { $('.poem-stanza').addClass('highlight'); }); Odnalezienie tekstu wiersza Podstawowym dziaaniem jQuery jest wybranie czci dokumentu. Wykonywane jest to za pomoc konstrukcji $(). Zazwyczaj przyjmuje ona jako parametr acuch znaków, który moe zawiera dowolne wyraenie selektora CSS. W tym przypadku chcemy odnale wszystkie czci dokumentu, do których przypisano klas poem-stanza, dlatego selektor jest bardzo prosty. W ksice opiszemy jednak równie o wiele bardziej wyszukane moliwoci. Róne sposoby odnajdywania czci dokumentu omówimy w rozdziale 2. 30 Rozdzia 1. • Pocztki Funkcja $() jest tak naprawd fabryk dla obiektu jQuery bdcego podstawowym budulcem, z jakim bdziemy od teraz pracowa. Obiekt jQuery zawiera zero lub wiksz liczb elementów drzewa DOM i pozwala nam wchodzi z nimi w rónego rodzaju interakcje. W tym przypadku chcemy zmodyfikowa wygld czci strony, co osigniemy, zmieniajc klasy przypisane do tekstu wiersza. Wstawienie nowej klasy Metoda .addClass(), tak jak wikszo metod jQuery, ma opisow nazw (ang. add class — „dodaj klas”). Dodaje ona klas CSS do wybranej czci strony. Jej jedynym parametrem jest nazwa klasy, jak naley doda. Metoda ta oraz jej odpowiednik .removeClass() pozwalaj nam atwo zaobserwowa dziaanie jQuery, kiedy bdziemy bada róne dostpne wyraenia selektorów. Na razie nasz przykad po prostu dodaje klas highlight, któr nasz arkusz stylów definiuje jako tekst z obramowaniem napisany kursyw. Warto zauway, e w celu dodania klasy do wszystkich zwrotek wiersza (elementów poem-stanza) nie jest konieczne wykonywanie jakiejkolwiek iteracji. Tak jak wspominalimy, jQuery wykorzystuje w metodach takich jak .addClass() iteracj niejawn, dziki czemu jedno wywoanie funkcji wystarczy do zmodyfikowania wszystkich wybranych czci dokumentu. Wykonanie kodu Poczenie $() i .addClass() wystarczy nam do osignicia celu, jakim jest zmiana wygldu tekstu wiersza. Jeli jednak ten wiersz kodu wstawimy po prostu w nagówku dokumentu, nie przyniesie to adnego efektu. Kod w JavaScripcie wykonywany jest w momencie napotkania go przez przegldark, a w czasie gdy przetwarzany jest nagówek, nie ma jeszcze adnego kodu HTML, któremu mona by nada styl. Musimy zatem opóni wykonanie kodu do czasu, gdy bdzie dla nas dostpne drzewo DOM. Tradycyjnym mechanizmem opóniania wykonywania kodu w JavaScripcie jest wywoanie kodu wewntrz programu obsugi zdarze (ang. event handler). Wikszo programów obsugi zdarze dostpna jest dla zdarze inicjowanych przez uytkownika, takich jak kliknicia mysz i nacinicia klawiszy. Gdybymy nie mieli dostpu do jQuery, musielibymy polega na programie obsugi zdarze onload, który wywoywany jest po wygenerowaniu strony (ze wszystkimi obrazkami). By wywoa kod ze zdarzenia onload, umiecilibymy go wewntrz funkcji: function highlightPoemStanzas() { $('.poem-stanza').addClass('highlight'); } Nastpnie doczylibymy t funkcj do zdarzenia, modyfikujc element <body> dokumentu HTML, tak by si do niej odwoywa: <body onload="highlightPoemStanzas();"> 31 jQuery 1.3. Wprowadzenie W ten sposób nasz kod zostaby wykonany po cakowitym zaadowaniu strony. To rozwizanie ma jednak swoje wady. Zmodyfikowalimy sam kod HTML, by wywoa zmian zachowania. Tak cise powizanie struktury i funkcji zamieca kod, wymagajc nieraz powtarzania wywoa tej samej funkcji na wielu rónych stronach lub — w przypadku zdarze takich jak kliknicie mysz — przy kadym pojawieniu si elementu na stronie. Dodanie nowych dziaa wymaga wtedy wprowadzania zmian w wielu miejscach, co zwiksza szans na popenienie bdu i komplikuje równoleg prac nad wieloma dokumentami projektantom i programistom. By unikn tych problemów, jQuery pozwala zaplanowa wywoanie funkcji na czas po zaadowaniu DOM — bez czekania na obrazki — dziki konstrukcji $(document).ready(). Z funkcj zdefiniowan jak powyej moemy zapisa: $(document).ready(highlightPoemStanzas); Technika ta nie wymaga wprowadzania jakichkolwiek modyfikacji do kodu HTML. Zamiast tego dziaanie jest doczane w caoci za pomoc pliku JavaScriptu. W rozdziale 3. dowiemy si, jak mona odpowiada na inne typy zdarze, rozdzielajc ich efekty od struktury dokumentu HTML. To wcielenie kodu jest jeszcze troch nieoptymalne, poniewa funkcja highlightPoemStanzas() definiowana jest tylko po to, by skorzysta z niej natychmiast — i to tylko raz. Oznacza to, e wykorzystalimy identyfikator w globalnej przestrzeni nazw funkcji, zyskujc niewiele, a teraz musimy pamita, by z niego ju wicej nie korzysta. JavaScript, podobnie jak inne jzyki programowania, zawiera sposób obejcia tego braku optymalnoci zwany funkcjami anonimowymi (czasami nazywany równie funkcjami lambda). Za pomoc funkcji anonimowych moemy pisa kod w sposób, który zosta zaprezentowany na pocztku: $(document).ready(function() { $('.poem-stanza').addClass('highlight'); }); Wykorzystujc sowo kluczowe function bez nazwy funkcji, definiujemy funkcj dokadnie tam, gdzie jest potrzebna, a nie wczeniej. Usuwa to niepotrzebne rozbudowanie kodu i pozwala zredukowa go do trzech wierszy JavaScriptu. Skrót ten jest szczególnie wygodny w przypadku kodu jQuery, gdy wiele metod przyjmuje jako argument funkcj, a funkcje takie rzadko mona wykorzysta ponownie. Kiedy skadni t wykorzystujemy do zdefiniowania funkcji anonimowej wewntrz ciaa innej funkcji, mona utworzy domknicie (ang. closure). Jest to bardziej zaawansowana koncepcja o szerokich moliwociach, jednak powinno si j dobrze zrozumie, gdy intensywnie wykorzystuje si definicje zagniedonych funkcji, gdy moe ona mie niezamierzone konsekwencje i implikacje w zakresie wykorzystania pamici. Kwesti t omawiamy w caoci w dodatku C. 32 Rozdzia 1. • Pocztki Gotowy produkt Kiedy nasz kod w JavaScripcie jest gotowy, strona wyglda tak: Rysunek 1.2. Zwrotki wierszy napisane s teraz kursyw i umieszczone s w ramce, zgodnie z arkuszem stylów alice.css, z powodu wstawienia klasy highlight za pomoc kodu w JavaScripcie. Podsumowanie Wiemy ju, dlaczego programista mógby wybra korzystanie z biblioteki JavaScriptu, zamiast pisa cay kod od podstaw — nawet w przypadku najprostszych zada. Widzielimy take, co sprawia, e jQuery sprawdza si jako doskonaa biblioteka, której zastosowanie moe by lepszym rozwizaniem od innych opcji. Wiemy take mniej wicej, jakiego typu zadania jQuery moe uproci. W niniejszym rozdziale nauczylimy si, jak udostpni jQuery kodowi w JavaScripcie na naszej stronie internetowej, jak wykorzysta funkcj fabryczn $() do zlokalizowania czci strony z przypisan okrelon klas, jak wywoywa metod .addClass() w celu nadania tej czci strony dodatkowego stylu, a take jak wywoa $(document).ready(), co spowoduje, e kod ten zostanie wywoany po zaadowaniu strony. Prosty przykad, którym si posuylimy, demonstruje sposób dziaania jQuery, jednak nie jest szczególnie przydatny w praktyce. W kolejnym rozdziale rozbudujemy ten kod, zapoznajc si z wyszukanym jzykiem selektorów jQuery i znajdujc praktyczne zastosowania dla tej techniki. 33