160 kb
Transkrypt
160 kb
Języki programowania wysokiego poziomu JavaScript jQuery JavaScript JavaScript – skryptowy, obiektowy język programowania, stworzony przez Netscape w celu dodania "interaktywności" stronom WWW. Zastosowania: • Elementy animowane i interaktywne (np. galerie zdjęć, okna pop-up, …) • Sprawdzanie poprawności formularzy (ale również pomoc przy ich wypełnianiu, np. data-kalendarz) • Tworzenie i obsługa elementów nawigacyjnych (wielopoziomowe rozwijane menu) • AJAX – zmiana treści strony bez jej przeładowania • RDW – tworzenie stron responsywnych http://rainbow.arch.scriptmania.com/scripts/mouse_clock.html http://randomibis.com/coolclock/ https://jqueryui.com/datepicker/ http://jquery.com/ JavaScript Mozilla, wzorując się na języku Java, chciała dać użytkownikom niezalezne od platformy (OS) środowisko do uruchamiania apletów, jednak rozwiązanie nie było adresowane do profesjonalnych programistów (jak Java, konkurująca wtedy z C++) Język początkowo nazywał się LiveScript, jednak nazwę szybko zmieniono na JavaScript (w tym czasie dodano możliwość komunikacji między JavaScript a Java). JavaScript Microsoft dodał obsługę skryptów (JScript i VBScript) do IE3.0, zaledwie pół roku po premierze JavaScript (rok po pierwszej wersji LiveScript) IE3.0 pojawił się w poprawce do Win 95 (Win95 SR 2). Była to również pierwsza wersja IE z obsługą CSS Aż do IE8 włącznie model DOM w IE istotnie różnił się od modelu DOM w NN (później FF) – skrypty NN nie działały w IE i na odwrót MS włączył JScript do .NET (ok. 2000 r.) – wykorzystują go dynamiczne serwisy tworzone w Visual Web Developer JavaScript Od 1996 r. ECMA (European Association for Standardizing Information and Communication Systems) zajmuje się specyfikacją języka. Nosi on nazwę ECMAScript. Pierwsza wersja była zbliżona do JavaScript 1.1, potem ECMAScript wyprzedzał JavaScript. Po kilu latach zastoju (1999-2009) prace wznowiono, najnowsza wersja ECMAScript (edycja 6.) - ECMAScript 2015, albo ECMAScript Harmony, pochodzi z czerwca 2015 ECMA to standard (semantyka) języka (JavaScrpt i JScript to jego implementacje), natomiast dostępne np. w przegląderce obiekty, jak DOM, definiują inne organizacje (głównie W3C) JavaScript Historia JavaScript • 1996: JS 1.0 (marzec - NN 2.0) JS 1.0 (sierpień - IE 3.0, Win95 SR 2) • 1997: JS 1.2 (NN 4.0) JS 3.0 (IE 4.0, ECMA 1.0) • 1998: JS 1.3 (NN 4.06, implementacja standardu ECMA 2.0) • 1999: JS 5.0 (IE 5.0, ECMA 2.0) – DOM, AJAX • 2000: JS 5.5 (IE 5.5, ECMA 3.0) JS 1.5 (Mozilla App., ECMA 3.0) – DOM • 2005: JS 1.6 (FF 1.5) • 2006: JS 5.7 (IE 7) JavaScript Wojny przeglądarek • Pierwsza wojna przeglądarek: 1997-1999 MS Internet Explorer vs Netscape Navigator Niestandardowe rozszerzenia ("fajniejsze" strony WWW); • Druga wojna przeglądarek: 2002-? MS Internet Explorer vs (Firefox + Safari + Opera) Zgodność ze standardami i likwidacja monopoli; HTML 2.0 3.0 4.0 4.1 5.0 1.0 1.1 XHTML PHP JavaScript 1.0 2.0 3.0 4.0 1 1.2 1.3 1.5 5.0 1.6 JavaScript Podstawowe cechy: • Działa po stronie przeglądarki Możliwość wykonania zależy od przeglądarki i użytkownika (można wyłączyć obsługę JavaScript!) • Język skryptowy Nie jest kompilowany, ale "na bieżąco" interpretowany i wykonywany - nie wymaga specjalistycznych narzędzi, jednak przydaje się wsparcie ze strony IDE (NetBeans je ma!) • Język obiektowy Dziwaczny (brak definicji klasy, jak C++, Java, C#, PHP, …), ale zaawansowany (ma np. dziedzicznie, mech. refleksji, …) • Działa w przestrzeni ograniczonej przez przeglądarkę Tylko bieżący dokument i nieliczne obiekty przeglądarki, nie ma np. wglądu do systemu plików (ale są dziury!) JavaScript Dodawanie skryptu do dokumentu HTML • Określenie języka skryptowego, sekcja head: <meta http-equiv="Content-Script-Type" content="text/javascript"> • Skrypt osadzony: <script type="text/javascript" charset="utf-8"> //treść skryptu </script> Kodowanie (atr. charset) jest opcjonalne Skrypt można umieścić w dowolnej części dokumentu (tj. zarówno w head, jak i body); może być kilka skryptów • Skrypt zewnętrzny: <script type="text/javascript" src="http://domena.com/js/skrypt.js"> </script> JavaScript Dodawanie skryptu do dokumentu HTML … • Atrybuty zdarzeń HTML: <div onclick="foo();"> </div> JavaScript Zmienne • Zmienne mają typ, choć może on się zmienić; Nie trzeba deklarować, są tworzone przez nadanie wartości: x = 7; s = "Hello!"; • Deklaracja ze słowem kluczowy var pozwala tworzyć zmienne lokalne (tego nie ma w PHP) var x = 13; var y = 7; function foo () { var x = 99; y = 14; } foo(); // x lokalne // y globalne // y zmieniło wartość, x nie JavaScript Operatory • Operatory są C-podobne, podobna jest też ich hierarchia: - inkrementacja i dekrementacja, negacja, tworzenie obiektu ++ -- ! new - mnożenie i dzielenie */% - dodawanie i odejmowanie +- - op. relacji i równości > >= < <= == != === - iloczyn logiczny && - suma logiczna || - przypisania = += -= *= /= JavaScript Instrukcje • Instrukcje również są C-podobne: - grupująca (blok) - warunkowa – if oraz if-else - wyboru – switch - iteracyjne – for, while oraz do-while (nowa wersja ECMAScript definiuje też instrukcję foreach) for (var i = 1; i <= 20; i++) { if (i % 2 == 0) document.write(i + " "); } JavaScript Funkcje • Trochę podobne do funkcji PHP – nie określa się typów argumentów i typu rezultatu; w przeciwieństwie do PHP mają dostęp do zmiennych globalnych function suma (a, b) { var s = a + b; return s; } var w = suma (7, 13); JavaScript Standardowe obiekty, DOM • Przeglądarka udostępnia obiekty: - window – bieżące okno (zakładka) przeglądarki oraz jego cechy, np. innerWidth, innerHeight, status - document – elementy wyświetlane na stronie (<body>) oraz wiele dodatkowych właściwości (np. cookie) i metod (np. getElementById() – często używana w skryptach) - history – historia ostatnio odwiedzanych stron (tylko w bieżącym oknie/zakładce!) - navigator – informacje o przeglądarce - location – informacja o aktualnie wyświetlanej stronie - screen – informacje o ekranie JavaScript Przykład 1 – wyświetlenie/ukrycie elementu function Toggle (id) { var node = document.getElementById(id); if (node.style.display == 'none') node.style.display = 'block'; else node.style.display = 'none'; } <div onclick='Toggle("help")'>Pokaż/ukryj pomoc</div> <div id='help'> <p>Pomoc… </div> JavaScript Przykład 2 – walidacja formularza function isOk () { var form = document.forms.nf1; var login = form.login.value; if (login=="") { alert("Error!"); return false; } else return true; } <form id='if1' name='nf1' onsubmit='return isOk()'> <input type='text' name='login'> <input type='submit'> </form> jQuery jQuery – darmowa biblioteka JavaScript, „hiper-obiektowa”, łatwa w użyciu, elastyczna, wydajna. Znacznie ułatwia tworzenie skryptów: • Wybieranie elementu (grupy elementów) DOM • Manipulowanie elementami DOM (treść, klasa, styl, …) • Funkcje obsługi zdarzeń • AJAX jQuery jQuery – linie wydań: • 1.xx – z obsługą IE 6-8 (obecnie 1.12) • 2.xx – bez (ocecnie 2.2) jQuery zwalnia z konieczności poznawania niuansów implementacji JavaScript w różnych przeglądarkach jQuery jQuery – sposób użycia • Manipulacja DOM: WybierzEl . FiltrujWybór . ZmieńEl • Zdarzenia WybierzEl . Dowiąż ( funkcja ) • AJAX Żądanie ( parametry, funkcja ) .Sukces ( funkcja ) .Porażka (funkcja ) Funkcja fabryczna jQuery() albo $() - funkcja fabryczna, wybiera element(y) do dalszych działań • Można stosować wszystkie selektory i kombinacje selektorów znane z CSS: $("div") <div> $(".post") <? class="post"> $("#menu") <? id="menu"> $("div.post > p") $("#menu a") Funkcja fabryczna jQuery() albo $() - funkcja fabryczna, wybiera element(y) do dalszych działań • Można stosować pseudoklasy jQuery, np.: :first – pierwszy znaleziony element (albo :last – ostatni) :first-child – pierwsze dziecko :nth-child() – n-te dziecko (numeracja od jeden) :nth-child(odd) – nieparzyste (albo even – parzyste) :first-of-type – pierwszy tego typu :nth-of-type() – n-ty tego typu, np. p:nth-of-type(1) :not() – niespełniający kryterium, np. :not(:first-child) Funkcja fabryczna jQuery() albo $() - funkcja fabryczna, wybiera element(y) do dalszych działań • Są też pseudoklasy dotyczące formularzy: :input :text – input type="text" (oraz :password, :radio, :submit, …) :checked :disabled Funkcja fabryczna Posługiwanie się funkcją fabryczną wymaga wprawy oraz precyzji • Np. czym różnią się: $("div:first-child") $("div :first-child") $("div p:first-child") $("div > p:first-child") Przydaje się dobry punkt zaczepienia w strukturze html, np.: <div class="post"> <h2> <div class="text"> <p> <p> <ul> <p> <table> <p> Filracja i/lub zmiana wyboru jQuery dostarcza funkcje do tego służące, m.in.: children() – dzieci każdego wcześniej wybranego add() – dodaj wg selektora not() – usuń wg selektora next() – następny nextAll() – wszystkie następne dzieci tego samego elementu first() – tylko pierwszy el. ze zbioru parent() – rodzic wybranego andSelf() – dodaje poprzedni zbiór do obecnego filter() – filtruje zbiór wg selektora $("h2").parent() $("p:nth-child(2)").nextAll() $("p").add("li").filter(":nth-child(odd)") Filracja i/lub zmiana wyboru Niejawna i jawna iteracja • Wszystkie operacje są wykonywane jako pseudo-pętla: jeżeli funkcja fabryczna zwróci zbiór elementów (a nie jeden), to czynności są wykonywane na każdym elemencie ze zbioru: $(".tip").hide(); • Jeżeli potrzebna jest jawna iteracja, należy użyć funkcji each(). Element DOM, na rzecz którego iteracja jest wykonywana, jest dostępny jako this; Aby użyć funkcji jQuery, trzeba użyć funkcji fabrycznej: $("this") $(".tip").each( function() { this.innerHtml = "!"; // DOM $(this).html("!"); // jQuery }); Zmiana wyglądu/treści elementu jQuery dostarcza funkcje do tego służące, m.in.: addClass(klasa) – dodaje klasę CSS (musi być zdefiniowana) removeClass(klasa) – usuwa klasę css(właściwość, wartość) – zmienia styl html(treść) – podmienia zawartość elementu empty() – opróżnia element z zawartości append(treść) – dodaje treść na końcu elementu prepend(treść) – na początku elementu after(treść) – dodaje treść za elementem $("tr:nth-child(odd)").addClass("gray"); $("#menu").append("<a href='xxx'>Xxx</a>"); $("#log").append("<p>" + message); $("#err").empty(); Zmiana wyglądu/treści elementu jQuery dostarcza więcej takich funkcji, m.in.: hide() – ukrywa show() – pokazuje toggle() – ukrywa/pokazuje fadeToggle() – jw. z efektem animacji classToggle() – dodaje/usuwa klasę $("#err").hide(); Sekwencje funkcji • Każda funkcja jQuery, służaca do manipulacji elementami DOM zwraca jako rezultat zbiór, na którym działała; Dzięki temu funkcje można łączyć w sekwencje $("#err").show().addClass("red"); • Funkcje wyboru elementów i manipulacji nimi można łączyć: $("div.post").show() .find("h2").addClass("big") .nextAll().removeClass("gray") .andSelf().addClass("red"); Zdarzenia jQuery dostarcza funkcje ułatwiające dowiązywanie funkcji obsługi zdarzeń click(funkcja) – obsługa onClick -- podobnie focus, hover, keypress, keydown, mousedown, … on("zdarzenie", funkcja) $("h2").next().hide(); $("h2").click( function() { $(this).next().fadeToggle(); }); Zdarzenia Dowiązywać można funkcje anonimowe albo nazwane • Funkcja anonimowa: $("h2").click( function() { $(this).next().fadeToggle(); }); • Funkcja nazwana: function Foo () { $(this).next().fadeToggle(); } $("h2").click( Foo ); AJAX jQuery dostarcza funkcje pobierające dane z serwera na kilku poziomach abstrakcji: • ajax – niskopoziomowy, nawiększe możliwości dostosowania, ale najbardziej złożony (~20 parametrów) • get i post (~4 parametry) • load (1/2 parametry, get albo post zależnie od drugiego) Oprócz tego są globalne zdarzenia • ajaxStart() • ajaxError() • ajaxSuccess() • ajaxComplete() AJAX Fukcja get(): • Deklaracja: $.get( URL [,data] [,success(data)]); • Przykład $("#getIt").click( function() { $.get("getIt.php", function(data) { $("#showIt").html(data); }); }); AJAX Fukcja get(): • Funkcja get (podobnie post) zwraca obiekt jqXHR, dzięki czemu można precyzyjniej określić działania po jej zakończeniu: $("#getIt").click( function() { $.get("getIt.php") .done(function(data) { $("#showIt").html(data); }) .fail(function() { $("showIt").html("<p>Błąd!"); }) .always(function() { // ??? }); }); Zdarzenie ready Użycie ready zapewnia bezpieczne działanie skryptu • Skrypt jest zazwyczaj dodawany na początku dokumentu html; Funkcja ready jest wykonywana po wczytaniu całego html, dzięki czemu istnieją już wszystkie potrzebne obiekty: $(document).ready(function() { }); JavaScript, jQuery i NetBeans Warto zapisać skrypty JavaScript i jQuery w oddzielnym pliku, wówczas NetBeans właściwie koloruje składnię i wskazuje ew. błędy: