Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00247 005073 15197172 na godz. na dobę w sumie
jQuery. Kod doskonały - książka
jQuery. Kod doskonały - książka
Autor: Liczba stron: 128
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-5099-6 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> jquery - programowanie
Porównaj ceny (książka, ebook, audiobook).

Używasz jQuery, ale chcesz robić to lepiej? Przekonaj się, jak możesz to osiągnąć!

jQuery to biblioteka programistyczna ułatwiająca korzystanie z języka Javascript, a jednocześnie niezwykle popularne narzędzie programistyczne, dzięki któremu można znacznie skrócić czas tworzenia skryptów i w dużej mierze uprościć ich kod. jQuery pozwala manipulować strukturą DOM, dynamicznie zmieniać zawartość stron, tworzyć animacje, obsługiwać zdarzenia, wykonywać zapytania AJAX, a także przeprowadzać wiele innych przydatnych operacji.

Duża popularność jQuery nie idzie niestety w parze z należytą znajomością tej biblioteki wśród programistów. Często postrzegają ją oni jako cudowną czarną skrzynkę, która spełnia ich oczekiwania, nie troszczą się jednak zbytnio o sposób jej działania. Ten stan rzeczy ma zmienić książka 'jQuery. Kod doskonały'. Osobom mającym pewne doświadczenie w posługiwaniu się Javascriptem i jQuery przedstawi ona mocne strony biblioteki oraz najlepsze techniki jej wykorzystania. Pomoże też poprawić wydajność pracy i efektywność kodu.

Chcesz dobrze zarządzać swoim kodem Javascript i podnieść jego wydajność? Ta książka jest właśnie dla Ciebie!


Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Redaktor prowadzący: Ewelina Burska Projekt okładki: Jan Paluch Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie?jqkodo Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. ISBN: 978-83-246-5099-6 Copyright © Helion 2012 Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treści Dla kogo jest ta książka? Rozdział 1. Wstęp ............................................................................... 5 5 6 7 8 Czego możesz się nauczyć? Jak czytać tę książkę? Dołączanie jQuery do strony Konwencja kodu Wcięcia Linia kodu Komentarze Deklaracja zmiennych Instrukcje warunkowe Nazewnictwo Rozdział 2. Przyjazny kod ................................................................ 11 11 11 12 13 15 15 15 17 18 20 23 26 29 30 32 Stosuj moduły Funkcje anonimowe a wzorce projektowe Skrypty niezależne od przeglądarki Stosuj szablony HTML Nie powtarzaj się Nienachalny kod Zorganizowany kod CoffeeScript Selektory Rozdział 3. Wydajny kod ................................................................. 35 35 37 38 42 Warstwa abstrakcji Proces selekcji Optymalizacja 4 jQuery. Kod doskonały Manipulacja Powolne drzewo DOM Tworzenie elementów Zdarzenia Propagacja zdarzeń Metoda bind() Metody live() i delegate() Metoda on() Tablice, iteracje, moduły i jQuery.utils Tablice i obiekty 48 48 50 53 53 57 60 61 63 63 Własne selektory Metoda data() Rozdział 4. Elastyczny kod .............................................................. 69 69 72 75 77 78 78 83 Potwierdzanie akcji Skróty klawiszowe Tworzenie dodatków Rozszerzanie obiektu jQuery Rozszerzanie obiektu jQuery.fn QUnit — testy jednostkowe Asercje Struktura testów Rozdział 5. Przetestowany kod ....................................................... 89 90 91 95 98 102 104 105 Przykładowy zestaw testów Jasmine — testy TDD Środowisko Jasmine Praca z Jasmine Podsumowanie ................................................................................. 117 118 119 Przyszłość jQuery Twoja cegiełka w jQuery Skorowidz .......................................................................................... 121 Rozdział 5. Przetestowany kod Jeśli do tej pory nie miałeś w zwyczaju sprawdzania poprawności swojego kodu JavaScript testami, prawdopodobnie testujesz działanie strony bezpośrednio w przeglądarce, klikając elementy i oczekując na pojawienie się błędu. Kiedy napotkasz błąd, możesz go poprawić i dalej testować działanie skryptów. Jest to bardzo popularne podej- ście do testowania JavaScript. Przede wszystkim jest jednak błędne. Manualne testowanie zaimplementowanych funkcjonalności to cza- sochłonny proces. Wymaganie, aby programista za każdym razem weryfikował działanie skryptów, opóźnia proces tworzenia aplikacji. Oczywiście ten obowiązek może przejąć tester aplikacji, wolelibyśmy jednak zredukować tego rodzaju koszty w procesie rozwoju aplikacji. Ponadto testująca osoba może przeoczyć niektóre niedociągnięcia. Nawet po poprawieniu błędów wkrótce mogą się one ujawnić po- nownie, dlatego nawet na późniejszych etapach rozwoju aplikacji musisz nadal sprawdzać funkcjonalność, która została już przete- stowana. Jeżeli zdarzy Ci się coś przeoczyć — wówczas błędny kod może znaleźć się w środowisku produkcyjnym aplikacji, a co za tym idzie — klienci odwiedzający stronę dostrzegą błędy. Testowanie manualne prawie zawsze prowadzi do regresji i przypadkowo ujaw- niających się błędów na stronie. Rozwiązaniem tych problemów jest wprowadzenie automatycznych testów pokrywających zaimplementowany przez Ciebie kod Java- Script. 90 jQuery. Kod doskonały Zanim rozpoczniemy pracę z testami, musimy ustalić, w jakim języ- ku będziemy opisywać pożądane przez nas zachowania. Przyjęło się, że powinien być to język angielski (podobnie jak w przypadku na- zewnictwa zmiennych i funkcji). Jedynie treści widziane przez użyt- kowników aplikacji powinny ukazywać się w przeznaczonym dla nich języku. Ponadto powinieneś założyć, że kod Twojej aplikacji może być w przyszłości rozwijany przez programistę, który nie zna Twojego ojczystego języka. Zaleca się prezentowanie wyników testów w języku angielskim. QUnit — testy jednostkowe Biblioteka QUnit zaimplementowana przez twórców jQuery umoż- liwi Ci tworzenie testów jednostkowych pokrywających Twój kod JavaScript. Testy jednostkowe pozwolą Ci na testowanie metod, obiektów i zachowań aplikacji pozostających w izolacji. Dzięki temu będziesz mógł łatwo znaleźć miejsce, w którym wystąpił błąd. Kod źródłowy narzędzia dostępny jest pod adresem https://github.com/ jquery/qunit. Aby rozpocząć pracę z QUnit, posłużymy się szablonem HTML z listingu 5.1. Listing 5.1. Plik szablonu zestawu testów jednostkowych QUnit !DOCTYPE html html head title My tests /title link rel= stylesheet href= http://github.com/jquery/qunit/raw/master/qunit/qunit.css type= text/css media= screen link rel= stylesheet href= http://code.jquery.com/qunit/qunit-git.css / script type= text/javascript src= http://github.com/jquery/qunit/raw/master/qunit/qunit.js /script !-- Tutaj umieĞü skrypty, które bĊdziesz testowaü -- script type= text/javascript src= myapp.js /script !-- Miejsce na pliki z testami -- script type= text/javascript src= tests.js /script Rozdział 5. i Przetestowany kod 91 /head body h1 id= qunit-header Example QUnit Test/h1 h2 id= qunit-banner /h2 div id= qunit-testrunner-toolbar /div h2 id= qunit-userAgent /h2 ol id= qunit-tests /ol /body /html Plik myapp.js zawiera kod, który chcesz przetestować. Natomiast w pliku tests.js zawarty jest zestaw testów jednostkowych QUnit. Pamiętaj, aby odnośniki do plików z testami zostały umieszczone dopiero po kodzie, który masz zamiar testować. Wewnątrz znacznika body trzymane są elementy, w których będą reprezentowane wyniki testów. Asercje Podstawowym narzędziem, jakim posługujemy się, pisząc testy jed- nostkowe, są asercje. Być może zetknąłeś się już z tym pojęciem pod- czas pracy z innymi językami programowania. Asercje służą do sprawdzania, czy wartość zwrócona przez kod programu jest zgodna z oczekiwaniami. Pozwala to na automatyczne wykrywanie błędów i szybkie znalezienie błędnie działającego kodu. W bibliotece QUnit najprostsza z asercji jest realizowana przez funk- cję ok(). Wykonuje ona sprawdzenie, czy podany argument jest prawdziwy. Przyjrzyjmy się przykładowemu testowi: test( Simple example , function() { var value = 10 5; ok( value, We expect 10 to be greater than 5 ); }); Najpierw wywołujemy metodę test(), która konstruuje test jednost- kowy. Pierwszym jej parametrem jest nazwa sprawdzanej funkcjonal- ności, zobaczysz ją potem w wynikach zestawu testów. Jako drugi parametr przyjmowana jest funkcja, w której będziesz implemen- tować testy. W tym prostym przypadku przypisujemy do zmiennej value wartość wyrażenia 10 5 (czyli true). Następnie wykonywana 92 jQuery. Kod doskonały jest asercja ok(value). Jeśli wartość value jest prawdziwa, wówczas test zakończony zostaje sukcesem. Po umieszczeniu powyższego kodu w pliku tests.js i uruchomieniu w przeglądarce strony z listingu 5.1 zobaczymy wynik uruchomienia testów pokazany na rysunku 5.1. Rysunek 5.1. Rezultat wykonania prostego testu w QUnit W rezultacie na stronie widzimy między innymi nazwę naszego ze- stawu testów, wersję przeglądarki, w której zostały one uruchomio- ne, oraz wyniki poszczególnych testów jednostkowych. Dodajmy do naszego zestawu jeszcze jedną asercję, która tym razem nie za- kończy się sukcesem: test( Simple example 2 , function () { var value1 = true || false, value2 = false; ok( value1, We expect boolean operators are working fine ); ok( value2, This test will not pass ); }); Rezultaty testów można zobaczyć na rysunku 5.2. Rysunek 5.2. Testy, które zakończyły się niepowodzeniem, są odpowiednio oznaczone Rozdział 5. i Przetestowany kod 93 Testy, które nie zakończyły się sukcesem, oznaczone są czerwonym kolorem. Ponadto wskazana jest konkretna asercja, która zwróciła błąd wraz z odpowiadającym jej numerem linii kodu. W takim wy- padku otrzymujesz natychmiast informację zwrotną, która pozwoli Ci na poprawienie działania aplikacji (lub poprawienie testów). Porównania Funkcja ok() daje jedynie możliwość sprawdzenia, czy określona wartość jest prawdziwa. Jeżeli za jej pomocą zechcesz porównywać wartości, należałoby przekazać do niej rezultat porównania jako pierwszy argument funkcji: test( Equality test , function () { ok( 5 * 5 == 25, We expect multiplication works fine ); }); Funkcja ok() jest tylko jedną z dostępnych asercji. Jeżeli interesuje Cię wynik porównania dwóch wartości, posłuż się funkcją equal(). Przyjmuje ona trzy argumenty. Argument pierwszy porównywany jest z drugim i jeśli nie zachodzi między nimi równość, wówczas zwracany jest błąd. Trzecim argumentem jest słowny opis asercji. Test z użyciem equal() może przybrać następującą postać: test( Equality test , function () { equal( 5 * 5, 25, We expect multiplication works fine ); }); Ten test zakończy się sukcesem. Możesz również zechcieć upewnić się, że dane obiekty nie są sobie równe. W takim wypadku posłuż się asercją notEqual(): test( Equality test , function() { notEqual( 1 , 2, We expect 1 does not equal 2 ); }); Ten test również zakończy się sukcesem, ponieważ 1 != 2. Zwróć uwagę, że cały czas mówimy o sprawdzaniu relacji równości, a nie identyczności. Na przykład następujące asercje: equal( 25 , 25); equal( 1, true); 94 jQuery. Kod doskonały będą prawdziwe i nie zwrócą błędu. Odpowiada to użyciu operatora == zamiast ===. Jeżeli porównując obiekty, chcesz uniknąć niejednoznacz- ności i sprawdzać przy tym ich typy, posłuż się asercją strictEqual(). Używana jest ona dokładnie w ten sam sposób co equal(): test( Strict equality test , function () { strictEqual( 1, 1); strictEqual( 25 , 25); strictEqual( 1, true); }); Wyniki powyższego testu pokazane są na rysunku 5.3. Rysunek 5.3. Użycie asercji strictEqual() odpowiada posłużeniu się operatorem === Dostępna jest również asercja notStrictEqual(), która działa analo- gicznie jak notEqual(). Na przykład następujące asercje zakończą się sukcesem: notStrictEqual( 25 , 25); notStrictEqual( 1, true); Do Ciebie należy decyzja, której z asercji powinieneś użyć. Możesz również po prostu używać funkcji ok(), która za argument będzie przyjmować wynik porównania obiektów. Jak dotąd dokonywaliśmy asercji jedynie z użyciem prostych obiek- tów. Aby móc porównywać złożone obiekty, posłuż się metodą deepEqual() (lub odpowiednio metodą notDeepEqual()): Rozdział 5. i Przetestowany kod 95 test( Deep equal test , function () { var foo = { baz: 1 } equal( foo, { baz: 1}, equal assertion will fail ) deepEqual( foo, { baz: 1}, deepEqual assertion will be success ) }); Wyniki testu pokazane są na rysunku 5.4. Rysunek 5.4. W przypadku porównywania złożonych obiektów posłuż się asercją deepEqual() Jak widać, użycie asercji equal() zakończyło się niepowodzeniem. Metody equal() oraz strictEqual() nie nadają się do porównywa- nia złożonych obiektów. W ich przypadku asercja zwróci błąd. Struktura testów Pisanie testów jeden po drugim w sposób liniowy może utrudnić orientację w kodzie. Podobnie jeśli zawrzesz wszystkie asercje w jed- nym teście — wtedy testy staną się nieczytelne i trudne w utrzymaniu. Dobrze by było, abyś podzielił pliki z testami na takie, które odno- szą się do osobnych funkcjonalności kodu JavaScript. Ponadto każdy z testów powinien dotyczyć oddzielnej składowej testowanej funk- cjonalności. Aby wyniki testów były bardziej czytelne i utrzymane w pewnym porządku, QUnit udostępnia funkcję module(). Pozwala ona na grupowanie testów ze względu na funkcjonalność, jaką obejmują. 96 jQuery. Kod doskonały Jako argument przyjmuje ona nazwę aktualnie testowanego mo- dułu. Spójrzmy na poniższy przykład: module( Module A test ); test( Basic test , function () { ok(1); }); test( Basic test 2 , function () { ok(true); }); module( Module B test ); test( Another test , function () { equal( 5, 5 ); }); W takim wypadku testy są podzielone na dwie grupy. Dwa pierwsze testy należą do pierwszego modułu, a trzeci test do drugiego. Pozwoli Ci to na łatwiejsze utrzymywanie porządku w kodzie. Ponadto przy każdym z wyników testu będzie dodatkowo napisane, jakiego mo- dułu on dotyczy. Testy asynchroniczne Dotychczas opisywane testy wykonywane były w sposób synchronicz- ny. Oznacza to, że każdy kolejny test uruchamiany jest dopiero wtedy, kiedy ostatni test zostanie zakończony. W takim wypadku testowanie funkcji asynchronicznych takich jak $.ajax() lub setTimeout() za- kończy się niepowodzeniem. Spójrzmy na poniższy przykład: test( Asynchronous test , function () { setTimeout( function () { ok(true); }, 1000 ); }); Po uruchomieniu takiego testu otrzymujemy w rezultacie następu- jącą informację: 0 tests of 1 passed, 1 failed. ... Expected at least one assertion, but none were run - call expect(0) to accept zero assertions. Rozdział 5. i Przetestowany kod 97 Oznacza to, że asercja ok(true) nie została w ogóle uruchomiona, ponieważ test został ukończony, zanim doszło do jej wykonania. Aby wykonać testy w sposób asynchroniczny, musisz posłużyć się funk- cjami stop() i start(). Odpowiadają one za wstrzymywanie i wzna- wianie procesu wykonywania testów. Omawiany test powinien przybrać następującą postać: test( Asynchronous test , function () { setTimeout( function () { ok(true); start(); }, 1000 ); stop(); }); Kiedy test dobiega końca, uruchomiona zostaje funkcja stop() i testy przechodzą w etap wstrzymania. Kolejne testy nie zostaną urucho- mione, dopóki nie zostanie wywołana funkcja start(). Umożliwi to wykonanie asercji ok(), która uruchomiona zostanie dopiero po upływie sekundy. Po wykonaniu asercji następuje wykonanie funk- cji start(), co przywraca normalny bieg testów. Przypomina to nieco rozwiązanie problemu synchronizacji z użyciem semaforów. Dostępny jest również test asyncTest(), który domyślnie wywołuje stop() na końcu testu. Dzięki temu możemy stosować nieco prostszy zapis: asyncTest( Asynchronous test , function () { setTimeout( function () { ok(true); start(); }, 1000 ); }); Podobną postać przybierze wysłanie żądania AJAX do serwera: asyncTest( Asynchronous test , function () { $.ajax({ url: http://localhost/ , success: function (data) { ok(true); start(); } }); }); 98 jQuery. Kod doskonały Możesz również zrezygnować z rozwiązywania tego problemu, tworząc synchroniczne żądania AJAX. W tym celu ustaw wartość pola async na false. test( Asynchronous test , function () { $.ajax({ url: http://localhost/ , async: false, success: function (data) { ok(true); } }); }); Możesz również przed uruchomieniem zestawu testów ustawić syn- chroniczne żądania AJAX jako domyślne: jQuery.ajaxSetup({async:false}); W takim wypadku możesz zaniedbać problem synchronizacji. Przykładowy zestaw testów Zajmijmy się teraz nieco bardziej realistycznym przypadkiem. Utwo- rzymy prostą wtyczkę wraz z zestawem testów. Wtyczka będzie im- plementować uproszczoną obsługę zakładek na stronie. Przykładowa struktura kodu HTML, na którym będzie uruchomiony plugin, będzie wyglądać tak jak na listingu 5.2. Listing 5.2. Kod HTML, którym posługiwać się będzie wtyczka div id= tabs ul class= tab-buttons li a href= #tab-1 Tab 1 /a /li li a href= #tab-2 Tab 2 /a /li li a href= #tab-3 Tab 3 /a /li /ul div class= tab id= tab-1 Lorem ipsum... /div div class= tab id= tab-2 Sit amet... /div div class= tab id= tab-3 Consectetur... /div /div Skorowidz A D aktualizacja danych, 114 asercja notStrictEqual(), 94 strictEqual(), 94 asercje, 91 atrybut data formularza, 76 data-disabling, 76 data-hotkey, 77 automatyczne uaktualnianie pól, 86 B BDD, Behaviour Driven Development, 102, 103 biblioteka Jasmine, 104 QUnit, 90 błędy, 119 C CoffeeScript, 32–34 czas ładowania skryptów, 9 deklaracja modułu, 101 długość linii kodu, 12 dodawanie elementu listy, 30 dołączanie elementów w pętli, 48 elementu do drzewa DOM, 48 jQuery do strony, 8 DOM dołączanie elementu, 48 znajdywanie elementów, 36 domknięcie, 20 domknięcie anonimowe, 20 dostęp do elementów DOM, 35 strony, 47 DRY, Don’t Repeat Yourself, 23 dwukrotne wysłanie formularza, 76 E element span, 56 testArea, 108 etap refaktoryzacji, 116 jQuery. Kod doskonały J Jasmine, 102, 105 język CoffeeScript, 32 HTML5, 44 jQuery 2.0, 119 jQuery.utils, 63 JSDoc, 13 K katalog spec, 105 src, 105 klasa article, 37 container, 47 kliknięcie elementu span, 54 kod nienachalny, 26 kolejność wywołań metod, 18 załączania plików, 19 komentarze, 13 kompresor YUI, 14 konstruktor $(obj), 71 kontekst wyszukiwania, 45 konwencja Lower CamelCase, 16 I lista błędów, 119 122 Firebug, 7 funkcja F $(selektor), 37, 45 $(this), 46 anonimowa, 24 callback(), 82 describe(), 104, 106, 109 detach(), 49 equal(), 93 expect(), 104 foo, 67 inicjalizacji, 22 it(), 104 module(), 95 ok(), 91, 93 opts.callback(), 112 plugin.foo, 111 querySelectorAll(), 39 spyOn(), 112 start(), 97 stop(), 97 tabs(), 101 toEqual(), 104 funkcje anonimowe, 20 asynchroniczne, 96 zawierane w HTML, 28 identyfikatory, 43 implementacja selektora, 70, 72 selektora pseudoklasy, 42 skrótów klawiszowych, 77 inicjalizacja, 22 instrukcja if-else, 24 instrukcje warunkowe, 15 iteracje, 63 L M metoda $(document).ready(), 17 afterEach(), 107 attr(), 53 beforeEach, 107 bind(), 57, 62 callback(), 82 Skorowidz 123 click(), 57 console.log(), 7 data(), 72, 73, 75, 76 delegate(), 60 document.createElement(), 51, 52 document.getElementById(), 35 each(), 64 event.stopPropagation(), 57 foo(), 83 getElementsByClassName(), 38 getElementsByTagName(), 40 inplace(), 106 jQuery.extend(), 80 jQuery.find(), 45 live(), 60, 62 notDeepEqual(), 94 on(), 61, 62 querySelectorAll(), 39 test(), 91 toBeUndefined(), 106 toggleClass(), 25 trigger(), 109 metody publiczne, 21 wstępujące, bottom-up, 40 moduł rozszerzony, 21 moduły, 18 N narzędzie JSDoc, 13 natywne funkcje przeglądarek, 29 metody, 36 O obiekt Array, 63 document, 36 jQuery, 78 jQuery.fn, 78, 83 obiekt Player, 105 obsługa JavaScript., 27 zakładek, 99 zdarzeń, 53, 57 operator ==, 94 ===, 94 optymalizowanie selektorów, 42 P pętla for, 65 plik myapp.js, 91 SpecRunner.html, 104 tabs.js, 99 tests.js, 91 porównywanie złożonych obiektów, 95 potwierdzanie akcji, 75 powtórzenia w kodzie, 23 propagacja zdarzeń, event bubbling, 55 przechwytywanie zdarzeń, event capturing, 54 przestrzenie nazw zdarzeń, 58 przeszukiwanie drzewa DOM, 37, 44 przetwarzanie selektorów, 40 pseudoselektor, 70 QUnit, 90 Q R reguła DRY, 23 relacja identyczności, 93 równości, 93 repozytorium git, 119 rezultaty testów, 92 rozszerzanie 124 jQuery. Kod doskonały modułu, 19 obiektu jQuery, 78 obiektu jQuery.fn, 83 S selektor $( #menu ), 38 $( .menu ), 38 $( div ), 39 $( div#articles ), 39 $( div.articles ), 39 $( #menu li a ), 41 selektory, 35 pseudoklas, 42 własne, 71 złożone, 39 silnik selektorów, 38, 40 Sizzle, 38, 43 składnia łańcuchowa, 26 skróty klawiszowe, 77 skrypty typu inline, 76 słowo kluczowe var, 15 specyfikacja CSS, 71 sprawdzanie uprawnień, 81 standard W3C, 56 struktura testów, 95 subdomena, 9 szablon Mustache, 31 szablony HTML, 31 szpieg, spies, 111 Ś śledzenie wywołań funkcji, 111 T tablice, 63 TDD, Test Driven Development, 102 test asyncTest(), 97 sprawdzający przywracanie elementu, 110 testowanie funkcji asynchronicznych, 96 kodu JavaScript, 102 wtyczki, 100 zakładek, 101 testy, 98, 112 asynchroniczne, 96 jednostkowe QUnit, 90 TDD, 102 tworzenie dodatku jQuery, 78 elementów, 50 elementu listy, 31 funkcji anonimowej, 24 modułu, 19 referencji, 65 U Unobtrusive JavaScript, nienachalny kod, 26 uruchamianie wtyczki, 109 użycie szpiegów, 111 W walidacja formularza, 27 komentarza, 28 warstwa abstrakcji, 29, 37 funkcjonalności, 26 prezentacji, 26 wartość NULL, 36 wcięcia, 11 własne atrybuty data, 74 pseudoselektory, 71 własności obiektu document, 36 Skorowidz 125 właściwości elementów, 36 wtyczka Firebug, 7 obsługująca zakładki, 99 wyciek pamięci, 59 wyniki testów, 115 wyszukiwanie z kontekstem, 45 znacznika, 40 Z zagnieżdżanie funkcji describe(), 109 zbędna konstrukcja if-else, 25 zdarzenia, 53, 57 zestaw testów, 112 zmienne, 15 prywatne, 20 publiczne, 21 znak końca linii, 12 Ż żądania AJAX, 85, 98 126 jQuery. Kod doskonały
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

jQuery. Kod doskonały
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: