Wstęp do jQuery - Instytutu Informatyki UJ
Transkrypt
Wstęp do jQuery - Instytutu Informatyki UJ
Programowanie w Sieci Internet — jQuery - nowy aromat kawy Kraków, 19 października 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki Co będzie dziś jQuery - nowy aromat kawy, czyli biblioteka do programowania w Java Script po stronie klienta / programowanie dla przeglądarki. • Wstęp do jQuery, • składnia, • pisanie w jQ, • $.ajax(), • kilka przydatnych funkcji, • przykłady. Wstęp do jQuery Aby zacząć programować w jQuery nie trzeba nam dużo. Po pierwsze musimy zdobyć jakąś świeżą (jak poranne bułeczki) bibliotekę jQuery. Najświeższe biblioteki można zawsze znaleźć na stronie: http://jquery.com/download/ lub jeśli masz dostęp do Git’a, to możesz pobrać go z repository: git clone git://github.com/jquery/jquery.git Następnie należy umieścić odpowiedni link do biblioteki w kodzie strony która ma zostać obsłużona przez nasz skrypt (najlepiej zrobić to w sekcji nagłówkowej, aczkolwiek w dowolnym miejscu na stronie będzie to działać). <script src=jquery.js></script> <!-- zgodne z html5 --> I już możesz rozpocząć działanie w skrypcie. Wstęp do jQuery c.d. jQuery umożliwia: • manipulację kodem HTML / DOM, • manipulację kodem CSS, • obsługę eventów HTML, • animacje i efekty wizualne, • obsługę AJAX, • oraz wiele innych. Aby wykonać akcję na obiekcie wystarczy umieścić ją po kropce za selektorem obiektu: $(selector).action(); np.: $(‘.initiallyHiddenClass’).show(‘slow’); $(this) odnosi się do bieżącego elementu w aktualnym kontekście. Funkcje callback wykonywane są po zakończeniu działania eventu np: $(selector).show(2000,myFunction); <!-- Po zakończeniu animacji efektu show() trwającego 2000 milisekund zostanie wywołana funkcja myFunction() --> Składnia Większość programów w JS jeśli miała się uruchomić po załadowaniu strony wykorzystywało kod: • window.onload = function(){ ... } W jQuery można to zrobić na kilka sposobów: • $(document).ready(function() { ... }); • $().ready(function() { ... }); • $(function() { ... }); • jQuery(document).ready(function($) { ... }); Składnia jQuery jest bardzo podobna do CSS. Selektory są definiowane tak jak w CSS. Akcje bindowane do elementów mogą definiować własne działanie przez definiowanie funkcji: $(selector).dblclic(function() { ... }); funkcje te mogą też przyjmować eventy i operować na nich: $(‘a’).click(function(e) { e.preventDefault(); alert(‘Locked’); }); jQuery ma bardzo zwięzłą składnię łańcuchową. Każdy łańcuch rozpoczyna się od znaku $, a kolejne polecenia dopinane są do łańcucha za pomocą kropki ‘.’ $(selektor).css(‘color’,‘red’).click(function(){ alert(‘ha, ha’); }).hide(‘slow’).show(‘fast’); Pisanie w jQ Aby debugować kod jQuery można wypisywać nieznane wartości przez alert(info); lub mniej inwazyjnie dla użytkownika (w przypadku gdybyśmy zapomnieli usunąć debugu z kodu przed wdrożeniem projektu) poprzez konsolę: console.log(info); Konsola jest dostępna przez firebug’a, dragonfly’a czy inspektora. Zamiast pisać pętli for in można wykorzystać wbudowaną akcję .each(), w której można zadeklarować funkcję, która ma zostać wykonana na każdym obiekcie zwróconym przez selektor. Jako, że niektóre akcje zwracają nowy obiekt a w jQuery akcje można umieszczać łańcuchowo, nie zawsze chcemy się odwołać do nowo zwróconego obiektu. Wtedy możemy skorzystać z metody .end() aby wrócić do poprzedniego elementu jQuery. $.ajax() AJAX służy do pobierania danych z zewnętrznego źródła i obrabiania go przez kod bez konieczności przeładowywania strony. $.ajax(argumenty); argumenty: • url - adres źródła danych (np.: “rss.xml”), • type - typ zapytania (np.: “GET”), • data - obiekt z danymi do wysłania w zapytaniu, • async - czy zapytanie ma być przetwarzane asynchronicznie (domyślnie true), • beforeSend - callback przed wysłaniem wiadomości, • success - callbac na wypadek powodzenia, • error - callback na wypadek niepowodzenia, • complete - callback wykonywany po zakończeniu success lub error, • i wiele innych. Przydatne funkcje Najczęściej przydają się funkcje automatyzujące animacje czy inne efekty na stronie. • show() - rozwija element od górnego lewego rogu, • hide() - chowa element zwijając go do górnego lewego rogu, • toggle() - działa zamiennie tak jak show() i hide(), • fadeIn(), fadeOut(), fadeToggle() - ukrywanie i pokazywanie elementu, • fadeTo() - zmienia opacity elementu do zadanej wartości, • slideUp(), slideDown(), slideToggle() - zwijanie w górę, w dół i zamienne, • animate({parametry},speed,callbackFunction) - do animacji obiektów za pomocą manipulacji stylami, np.: $("div").animate({ height:’+22px’, width:’+22px’,left:’-11px’,top:’-11px’ }); • stop() - zatrzymuje akcje animacji i efektów, Przydatne funkcje c.d. • text() - zwraca wartość jedynie tekstową elementu (pomijając tagi HTML), • html() - zwraca wartość zachowując wewnątrz strukturę drzewa DOM, • val() - pobiera zawartość atrybutu value elementu, jeśli podano wartość jako atrybut, to akcje te ustawią odpowiednio zawartości elementu • attr(name,val) - jeśli brak val podaje wartość atrybutu name, wpp ustawia go na val, • append() - dopina wartość z argumentu na koniec zawartości elementu, • prepend() - jak wyżej, ale przed zawartością elementu, • after() - dopina zawartość za danym elementem, • before() - dopina zawartość przed danym elementem, • remove() - usuwa dany element z drzewa DOM wraz z wszystkimi dziećmi, • empty() - usuwa z drzewa DOM zawartość wraz z wszystimi dzieci danego elementu, • addClass(), removeClass(), toggleClass(), css() - dodaje, usuwa ulasy i zmienia css, • width(), height(), innerWidth(), innerHeight(), outerWidth(), outerHeight() - zwracają szerokości i wysokości elementu, Przykłady Kod jQuery: $("div").animate({left:'200px',fontSize:'3em',width:'+=110px',height:'-=46px'},3000); element do manipulacji na stronie: <div style="height:100px;width:200px;">ANIMATE ME</div> $.ajax({ ! type: "GET", ! url: "time.xml", ! success: function(data) { ! ! T = $(data).find(‘time’); ! ! ! ! $('.now').children().remove(); ! ! $('#schoolTable').children().remove(); ! ! var tmp = 0; ! ! var i = 0; ! ! $(‘.rows’).each(function(){ ! ! ! if(T > ++i) ! ! ! ! tmp = i; ! ! ! $('#schoolTable').append($(this)); ! ! } ! ! if(T > S && T < E) ! ! ! $('.now').append($(‘.rows:nth-child(‘+i+’)’).show(); ! ! else ! ! ! $('.now').hide(); ! } }); Dziękuję za uwagę!