METODY ZWRACAJĄCE CO NAJMNIEJ JEDEN ELEMENT (W POSTACI NODELIST) :\ELHUDHOHPHQWOXEHOHPHQW\QDSRGVWDZLHZDUWRĂFLDWU\EXWX class$E\HOHPHQWPRĝQDE\ïRZ\EUDÊ]QDF]QLN+70/PXVL ]DZLHUDÊDWU\EXWclass']LDïDQLHWHMPHWRG\MHVWV]\EV]HQLĝ querySelectorAll()
div
111
for (var i = 0; i < 10; i++) { document.write(i); }
DOŁĄCZENIE PLIKU JAVASCRIPT NA STRONIE HTML .LHG\QDVWURQLHLQWHUQHWRZHMFKFHV]Xĝ\ÊNRGX-DYD6FULSWPXVLV] Z\NRU]\VWDÊHOHPHQW+70/QDMOHSV]\P UR]ZLÈ]DQLHPMHVWXPLHV]F]DQLHVNU\SWöZZRGG]LHOQ\FKSOLNDFK
=ZUöÊXZDJÚĝHOLF]E\QLHVÈ XMPRZDQHZ]QDNLF\WRZDQLD Gdy zmiennej zostanie przypiVDQDZDUWRĂÊQD]Z\]PLHQQHM PRĝQDXĝ\ZDÊZFHOXSU]HGVWDZLHQLDWHMZDUWRĂFLSRGREQLH MDNPDWRPLHMVFHZDOJHEU]H :RPDZLDQ\PSU]\NïDG]LH NRV]WFDïNRZLW\MHVWREOLF]DQ\ SU]H]SRPQRĝHQLHFHQ\MHGQHM OLWHU\SU]H]OLF]EÚOLWHU]DPöZLRQ\FKSU]H]Xĝ\WNRZQLND 8PLHV]F]HQLHPZ\QLNXQD VWURQLH]DMPXMÈVLÚGZD RVWDWQLHSROHFHQLD6]F]HJöïRZHRPöZLHQLHWHMWHFKQLNL ]QDMG]LHV]ZUR]G]LDOH ZSRGUR]G]LDïDFKķ0HWRG\ Z\ELHUDMÈFHSRV]F]HJöOQH HOHPHQW\ĵLķ8]\VNDQLHGRVWÚSX i uaktualnienie tekstu za SRPRFÈZïDĂFLZRĂFLWH[W&RQWHQWLLQQHU7H[W ĵ3LHUZV]H ]Z\PLHQLRQ\FKSROHFHñZ\V]XNXMHHOHPHQWNWöUHJRDWU\EXW idPDZDUWRĂÊcost. Natomiast GUXJLH]DVWÚSXMH]DZDUWRĂÊWHJR HOHPHQWXQRZÈ
UŻYCIE ZMIENNEJ DO PRZECHOWYWANIA WARTOŚCI BOOLOWSKIEJ :SUDZG]LH]PLHQQDERRORZVNDPRĝH SU]HFKRZ\ZDÊMHG\QLHZDUWRĂFLtrue lub falseDOHWHQW\SGDQ\FKMHVWEDUG]R Xĝ\WHF]Q\ :SU]\NïDG]LHSRSUDZHMVWURQLHZDUWRĂFL true i falseVÈXĝ\ZDQHZDWU\EXWDFK classHOHPHQWöZ+70/:DUWRĂFLWH SRZRGXMÈSU]\SLVDQLHUöĝQ\FKNODV&66 trueZ\ĂZLHWODķSWDV]NDĵQDWRPLDVWfalse NU]\ĝ\N6SRVREDPLXVWDZLDQLDDWU\EXWX class]DMPLHP\VLÚZUR]G]LDOH 5]DGNR]GDU]DVLÚSRWU]HEDZ\ĂZLHWOHQLD VïöZtrue lub false na stronie internetoZHMDOHRPDZLDQ\WXWDMW\SGDQ\FKPD GZDSRSXODUQH]DVWRVRZDQLD
c02/js/boolean-variable.js
JAVASCRIPT
var inStock; var shipping; inStock = true; shipping = false; var elStock = document. getElementById(’stock’); elStock.className = inStock; var elShip = document. getElementById(’shipping’); elShip.className = shipping;
c02/boolean-variable.html
3LHUZV]HW\SERRORZVNLMHVWVWRVRZDQ\ JG\ZDUWRĂFLÈPRĝHE\ÊW\ONRtrue lub false7HZDUWRĂFLPRĝQDSRWUDNWRZDÊ jako ZïÈF]RQ\ i Z\ïÈF]RQ\ lub 0 i 1true RGSRZLDGDZïÈF]RQ\ lub 1, natomiast falseRGSRZLDGDZ\ïÈF]RQ\ lub 0. 'UXJLHW\SERRORZVNLMHVWXĝ\ZDQ\NLHG\ NRGPRĝHPLHÊZLÚFHMQLĝW\ONRMHGQÈ ĂFLHĝNÚG]LDïDQLD3DPLÚWDMĝHZ]DOHĝQRĂFLRGRNROLF]QRĂFLPRĝQDZ\NRQ\ZDÊ LQQ\NRGMDN]RVWDïRWRSRND]DQHQD GLDJUDPDFKZNVLÈĝFH
PRZYKŁAD PODSTAWOWE INSTRUKCJE JAVASCRIPT c02/js/example.js
JAVASCRIPT
8WZRU]HQLH]PLHQQ\FKGRREVïXJLNRPXQLNDWXSRZLWDQLD var greeting = ’Witaj, ’; var name = ’Janku’; YDUPHVVDJH ijSURV]ÚVSUDZGě]DPöZLHQLHij 3RïÈF]HQLHSRZ\ĝV]\FK]PLHQQ\FKZFHOXXWZRU]HQLDRVWDWHF]QHJRNRPXQLNDWX var welcome = greeting + name + message; 8WZRU]HQLH]PLHQQ\FKGRREVïXJLV]F]HJöïöZ]ZLÈ]DQ\FK]WDEOLF]NÈ var sign = ’Montague House’; var tiles = sign.length; var subTotal = tiles * 5; var shipping = 7; var grandTotal = subTotal + shipping; 3REUDQLHHOHPHQWXNWöUHJRZDUWRĂFLÈDWU\EXWXLGMHVWJUHHWLQJ var el = document.getElementById(’greeting’); =DVWÈSLHQLHZDUWRĂFLWHJRHOHPHQWXVSHUVRQDOL]RZDQ\PNRPXQLNDWHPSRZLWDQLD el.textContent = welcome; 3REUDQLHHOHPHQWXNWöUHJRZDUWRĂFLÈDWU\EXWXLGMHVWXVHU6LJQDQDVWÚSQLH XDNWXDOQLHQLHMHJR]DZDUWRĂFL var elSign = document.getElementById(’userSign’); elSign.textContent = sign; 3REUDQLHHOHPHQWXNWöUHJRZDUWRĂFLÈDWU\EXWXLGMHVWWLOHVDQDVWÚSQLH XDNWXDOQLHQLHMHJR]DZDUWRĂFL var elTiles = document.getElementById(’tiles’); elTiles.textContent = tiles; 3REUDQLHHOHPHQWXNWöUHJRZDUWRĂFLÈDWU\EXWXLGMHVWVXE7RWDODQDVWÚSQLH XDNWXDOQLHQLHMHJR]DZDUWRĂFL var elSubTotal = document.getElementById(’subTotal’); HO6XE7RWDOWH[W&RQWHQW VXE7RWDOij]ïij 3REUDQLHHOHPHQWXNWöUHJRZDUWRĂFLÈDWU\EXWXLGMHVWVKLSSLQJDQDVWÚSQLH XDNWXDOQLHQLHMHJR]DZDUWRĂFL var elSubTotal = document.getElementById(’shipping’); HO6XE7RWDOWH[W&RQWHQW VKLSSLQJij]ïij 3REUDQLHHOHPHQWXNWöUHJRZDUWRĂFLÈDWU\EXWXLGMHVWJUDQG7RWDODQDVWÚSQLH XDNWXDOQLHQLHMHJR]DZDUWRĂFL var elGrandTotal = document.getElementById(’grandTotal’); HO*UDQG7RWDOWH[W&RQWHQW JUDQG7RWDOij]ïij
PODSTAWOWE INSTRUKCJE JAVASCRIPT
89
PODSUMOWANIE PODSTAWOWE INSTRUKCJE JAVASCRIPT f 6NU\SWVNïDGDVLÚ]VHULLSROHFHñ]NWöU\FKNDĝGHSU]\SRPLQD NURNZSU]HSLVLHNXOLQDUQ\P f 6NU\SW]DZLHUDEDUG]RGRNïDGQHLQVWUXNFMH1DSU]\NïDG QDND]XMH]DSDPLÚWDQLHZDUWRĂFLSU]HGSU]HSURZDG]HQLHP REOLF]Hñ]MHMXĝ\FLHP f =PLHQQHVïXĝÈGRW\PF]DVRZHJRSU]HFKRZ\ZDQLDGDQ\FK Z\NRU]\VW\ZDQ\FKZVNU\SFLH f 7DEOLFDWR]PLHQQDVSHFMDOQHJRW\SXĽPRĝHSU]HFKRZ\ZDÊ ZLHOHHOHPHQWöZSRZLÈ]DQ\FK]HVREÈGDQ\FK f -DYD6FULSWUR]UöĝQLDZDUWRĂFLOLF]ERZHļ FLÈJLWHNVWRZH WHNVW RUD]ZDUWRĂFLERRORZVNLHtrue i false f 1DSRGVWDZLHZ\UDĝHQLDMHVWREOLF]DQDMHGQDZDUWRĂÊ f 3RGF]DVREOLF]DQLDZDUWRĂFLZ\UDĝHQLDRSLHUDMÈVLÚ QDRSHUDWRUDFK
3ROHFHQLD-DYD6FULSWXDNWXDOQLDMÈWUHĂÊNRPXQLNDWXZ\ĂZLHWODQHJRQDJöU]HVWURQ\)XQNFMDG]LDïD SRGREQLHMDNPDJD]\QĽSROHFHQLDZQDZLDVLH NODPURZ\PVÈSU]HFKRZ\ZDQHGRSöNLGRSöW\ QLHEÚG]LHV]JRWRZ\QDLFKXĝ\FLH3ROHFHQLDWH QLH]RVWDQÈZLÚFZ\NRQDQHDĝGRFKZLOLwywoïDQLDIXQNFML:\ZRïDQLHIXQNFMLQDVWÚSXMHW\ONR ZRVWDWQLPZLHUV]XVNU\SWX FUNKCJE, METODY I OBIEKTY
95
DEKLAROWANIE FUNKCJI :FHOXXWZRU]HQLDIXQNFMLQDGDMHV]MHMQD]ZÚDQDVWÚSQLHZQDZLDVLH NODPURZ\PXPLHV]F]DV]SROHFHQLDQLH]EÚGQHGRZ\NRQDQLD]DGDQLD SU]H]WÚIXQNFMÚ7HQSURFHVQRVLQD]ZÚGHNODUDFMLIXQNFML )XQNFMÚGHNODUXMHV]]DSRPRFÈ VïRZDNOXF]RZHJRfunction
DEKLARACJA FUNKCJI WYMAGAJĄCEJ INFORMACJI &]DVDPLIXQNFMDSRWU]HEXMHSHZQ\FKLQIRUPDFMLZFHOXZ\NRQDQLD MHM]DGDQLD:WDNLFKSU]\SDGNDFKQDOHĝ\]DGHNODURZDÊIXQNFMÚZUD] z SDUDPHWUDPL:HZQÈWU]IXQNFMLSDUDPHWU\G]LDïDMÈQD]DVDG]LHSRGREQHM GR]PLHQQ\FK
WYWOŁANIE FUNKCJI WYMAGAJĄCEJ DANYCH 3RGF]DVZ\ZRï\ZDQLDIXQNFML]SDUDPHWUDPLZDUWRĂFLSU]H]QDF]RQH GRXĝ\FLDQDOHĝ\SRGDÊZQDZLDVLH]QDMGXMÈF\PVLÚSRQD]ZLHIXQNFML :DUWRĂFLWHVÈQD]\ZDQHDUJXPHQWDPL$UJXPHQW\PRJÈE\ÊSRGDQH ZSRVWDFLZDUWRĂFLOXE]PLHQQ\FK
POBRANIE POJEDYNCZEJ WARTOŚCI Z FUNKCJI 3HZQHIXQNFMH]ZUDFDMÈGDQHGRNRGXNWöU\Z\ZRïDïIXQNFMÚ 1DSU]\NïDGSRSU]HSURZDG]HQLXREOLF]HñIXQNFMD]ZUDFDZ\QLN 3U]HGVWDZLRQDSRQLĝHMIXQNFMD calculateArea()]ZUDFD GRZ\ZRïXMÈFHJRMÈNRGX REOLF]RQHSROHSURVWRNÈWD
IXQFWLRQFDOFXODWH$UHDZLGWKKHLJKW ^ var area ZLGWK KHLJKW return area } var wallOne FDOFXODWH$UHD var wallTwo FDOFXODWH$UHD 3DPLÚWDMĝHSRXĝ\FLXSROHFHQLDreturnLQWHUSUHWHURSXV]F]DIXQNFMÚLSRZUDFDGRSROHFHQLDNWöUH VSRZRGRZDïRMHMZ\ZRïDQLH-HĝHOLSRSROHFHQLXreturnZIXQNFML]QDMGXMÈVLÚMDNLHNROZLHNLQQHSROHFHQLDQLHEÚGÈSU]HWZRU]RQH
ZWROT WIELU WARTOŚCI Z FUNKCJI ']LÚNLWDEOLF\IXQNFMDPRĝH]ZUöFLÊZLÚFHMQLĝW\ONRMHGQÈZDUWRĂÊ 1DSU]\NïDGSU]HGVWDZLRQDQDWHMVWURQLHIXQNFMDREOLF]DSROH LSRMHPQRĂÊV]HĂFLDQX 3RQLĝHMSU]HGVWDZLRQRQRZÈ IXQNFMÚRQD]ZLHgetSize() 3ROHSURVWRNÈWD]RVWDMHREOLF]RQHDQDVWÚSQLHSU]HFKRZ\ZDQH Z]PLHQQHMarea
function getSizeZLGWKKHLJKWGHSWK ^ var area ZLGWK KHLJKW var volume ZLGWK KHLJKW GHSWK var sizes = [areavolume@ return sizes } var areaOne = getSize [0] var volumeOne = getSize [1] =PLHQQDareaOneSU]HFKRZXMH SROHSURVWRNÈWDRZ\PLDUDFK QD7RREOLF]RQHSROHMHVW SLHUZV]ÈZDUWRĂFLÈZWDEOLF\ sizes
FUNKCJE ANONIMOWE I FUNKCJE WYRAŻENIA :\UDĝHQLHSRZRGXMHZ\JHQHURZDQLHZDUWRĂFL:\UDĝHQLHPRĝQD]DVWRVRZDÊ ZPLHMVFXZNWöU\PVSRG]LHZDQHVÈZDUWRĂFL-HĝHOLZPLHMVFXZNWöU\P SU]HJOÈGDUNDLQWHUQHWRZDRF]HNXMHZ\UDĝHQLDEÚG]LHXĝ\WDIXQNFMD QDSU]\NïDGMDNRDUJXPHQWIXQNFML WR]RVWDQLHSRWUDNWRZDQDMDNRZ\UDĝHQLH DEKLARACJA FUNKCJI
IXQFWLRQJHW$UHDZLGWKKHLJKW ^ var area ZLGWK KHLJKW return area } var wallSize JHW$UHD document.write(wallSize ZAKRES LOKALNY (NA POZIOMIE FUNKCJI) ZAKRES GLOBALNY
FUNKCJE, METODY I OBIEKTY
JAK DZIAŁAJĄ PAMIĘĆ I ZMIENNE? =PLHQQHJOREDOQHXĝ\ZDMÈZLÚNV]HMLORĂFLSDPLÚFLSRQLHZDĝSU]HJOÈGDUND LQWHUQHWRZDPXVLMHSU]HFKRZ\ZDÊSU]H]FDï\RNUHVZF]\WDQLDVWURQ\LQWHUQHWRZHMZ\NRU]\VWXMÈFHMWH]PLHQQH=PLHQQHORNDOQHVÈSU]HFKRZ\ZDQH ZSDPLÚFLW\ONRZWUDNFLHZ\NRQ\ZDQLDIXQNFMLZNWöUHMMH]DGHNODURZDQR UTWORZENIE ZMIENNEJ W KODZIE
2EOLF]HQLHZLHONRĂFLG]LDïNL function showPlotSize(){ var width var height UHWXUQij3ROHZLGWK KHLJKW } var msg = showArea()
2EOLF]HQLHZLHONRĂFLRJURGX function showGardenSize() { var width var height UHWXUQZLGWK KHLJKW } var msg VKRZ*DUGHQ6L]H =PLHQQHZ]DNUHVLHJOREDOQ\PZ\VWÚSXMH
NRQĠLNWQD]Z =PLHQQHZ]DNUHVLHIXQNFMLPLÚG]\QLPLQLH
Z\VWÚSXMHNRQĠLNWQD]Z
FUNKCJE, METODY I OBIEKTY
CO TO JEST OBIEKT?
2ELHNWWR]JUXSRZDQ\]ELöU]PLHQQ\FKLIXQNFMLSU]H]QDF]RQ\GRXWZRU]HQLD PRGHOXOXEF]HJRNROZLHNLQQHJRFRMHVW]QDQHZĂZLHFLHU]HF]\ZLVW\P :RELHNFLH]PLHQQHLIXQNFMHSU]\ELHUDMÈQRZHQD]Z\ W OBIEKCIE ZMIENNE STAJĄ SIĘ WŁAŚCIWOŚCIAMI
TABLICA OBIEKTÓW I OBIEKTY W TABLICY ,VWQLHMHPRĝOLZRĂÊïÈF]HQLDWDEOLFLRELHNWöZZFHOXXWZRU]HQLD VNRPSOLNRZDQ\FKVWUXNWXUGDQ\FK7DEOLFDPRĝHSU]HFKRZ\ZDÊVHULÚ RELHNWöZLSDPLÚWDÊLFKNROHMQRĂÊ =NROHLRELHNWPRĝH]DZLHUDÊWDEOLFH MDNRZDUWRĂFLMHJRZïDĂFLZRĂFL
OBIEKTY W TABLICY :DUWRĂFLÈGRZROQHJRHOHPHQWXWDEOLF\ PRĝHE\ÊRELHNW]DSLVDQ\]DSRPRFÈ VNïDGQLOLWHUDïXRELHNWX :RPDZLDQ\PSU]\NïDG]LHZFHOXX]\VNDQLD GRVWÚSXGRUDFKXQNX]DWHOHIRQ ZSRNRMXroom3QDOHĝ\Xĝ\ÊSRQLĝV]HJR SROHFHQLD
2 OBIEKTOWY MODEL DOKUMENTU. 7HQPRGHOXĝ\ZDRELHNWöZ GRXWZRU]HQLDELHĝÈFHMVWURQ\ LQWHUQHWRZHM1RZ\RELHNWMHVW WZRU]RQ\GODNDĝGHJRHOHPHQWX LSRV]F]HJöOQ\FKVHNFML WHNVWXQDVWURQLH
CO ZOSTANIE OMÓWIONE W TEJ CZĘŚCI ROZDZIAŁU? :F]HĂQLHMGRZLHG]LDïHĂVLÚMDNX]\VNDÊGRVWÚSGR ZïDĂFLZRĂFLLPHWRGRELHNWX3RQLĝHMSU]HGVWDZLRQRZLÚFFHOWHMF]ÚĂFLUR]G]LDïX
CO TO JEST MODEL OBIEKTOWY? 'RZLHG]LDïHĂVLÚĝHRELHNWPRĝHE\ÊXĝ\W\ GRWHJRDE\PRĝQDE\ïRXWZRU]\ÊQDSRGVWDZLH GDQ\FKPRGHOSHZQHMU]HF]\SRFKRG]ÈFHM ]HĂZLDWDU]HF]\ZLVWHJR 0RGHORELHNWRZ\WRJUXSDRELHNWöZ]NWöU\FK NDĝG\SU]HGVWDZLDSRZLÈ]DQHU]HF]\SRFKRG]ÈFH ]HĂZLDWDU]HF]\ZLVWHJR5D]HPWZRU]ÈPRGHO F]HJRĂ]QDF]QLHZLÚNV]HJR 'ZLHVWURQ\ZF]HĂQLHMGRZLHG]LDïHĂVLÚĝHWDEOLFD PRĝHSU]HFKRZ\ZDÊ]ELöURELHNWöZ3RQDGWR ZïDĂFLZRĂFLÈRELHNWXPRĝHE\ÊWDEOLFD,VWQLHMH UöZQLHĝPRĝOLZRĂÊĝHZïDĂFLZRĂFLÈRELHNWX EÚG]LHLQQ\RELHNW.LHG\RELHNWMHVW]DJQLHĝGĝRQ\ZLQQ\PRELHNFLHQD]\ZDQ\JRRELHNWHP SRWRPQ\P FUNKCJE, METODY I OBIEKTY
TRZY GRUPY WBUDOWANYCH OBIEKTÓW UŻYCIE WBUDOWANYCH OBIEKTÓW 7U]\]HVWDZ\ZEXGRZDQ\FKRELHNWöZRIHUXMÈUöĝQHJRURG]DMXQDU]ÚG]LDSRPDJDMÈFHZWZRU]HQLX VNU\SWöZGODVWURQLQWHUQHWRZ\FK 5R]G]LDï]RVWDïSRĂZLÚFRQ\RELHNWRZHPX PRGHORZLGRNXPHQWXSRQLHZDĝPRGHOWHQMHVW Z\PDJDQ\ZFHOXX]\VNDQLDGRVWÚSXGR]DZDUWRĂFLVWURQ\LQWHUQHWRZHMLMHMXDNWXDOQLDQLD 3R]RVWDïHGZD]HVWDZ\RELHNWöZEÚGÈZSURZDG]RQHZW\PUR]G]LDOHDSU]\NïDG\LFKXĝ\FLD ]QDMG]LHV]ZSR]RVWDïHMF]ÚĂFLNVLÈĝNL
OBIEKTOWY MODEL PRZEGLĄDARKI INTERNETOWEJ 2ELHNWRZ\PRGHOSU]HJOÈGDUNLLQWHUQHWRZHM WZRU]\PRGHOGODRNQDOXENDUW\SU]HJOÈGDUNL LQWHUQHWRZHM 1DVDPHMJöU]HPRGHOX]QDMGXMHVLÚRELHNW windowSU]HGVWDZLDMÈF\ELHĝÈFHRNQROXENDUWÚ SU]HJOÈGDUNLLQWHUQHWRZHM-HJRRELHNW\SRWRPQH SU]HGVWDZLDMÈSR]RVWDïHIXQNFMHSU]HJOÈGDUNL Bieżące okno lub karta przeglądarki internetowej
WINDOW
DOCUMENT
HISTORY
LOCATION
NAVIGATOR
SCREEN
Bieżąca strona internetowa Strony w historii przeglądarki internetowej Adres URL bieżącej strony Informacje o przeglądarce internetowej Informacje o ekranie urządzenia
POBRANIE ELEMENTU NA PODSTAWIE WARTOŚCI ATRYBUTU CLASS Metoda getElementsByClassName() SR]ZDODQDZ\EöUW\FKHOHPHQWöZNWöU\FKDWU\EXWFODVV ma ZVND]DQÈZDUWRĂÊ
POBRANIE ELEMENTU NA PODSTAWIE SELEKTORA CSS Metoda TXHU\6HOHFWRU ]ZUDFDSLHUZV]\ZÚ]Hï HOHPHQWXNWöU\]RVWDïGRSDVRZDQ\GRVHOHNWRUD&66 =NROHLZDUWRĂFLÈ]ZURWQÈ metody querySeletorAll()MHVW NROHNFMDNodeListZV]\VWNLFK GRSDVRZDñ
POWTÓRZENIE OPERACJI DLA CAŁEJ KOLEKCJI NODELIST .LHG\PDV]NROHNFMÚNodeListPRĝHV]Z\NRU]\VWDÊSÚWOÚZFHOXLWHUDFML SU]H]ZV]\VWNLHZÚ]ï\DQDVWÚSQLH]DVWRVRZDÊWHVDPHSROHFHQLDGOD NDĝGHJR]QLFK *G\ZRPDZLDQ\PSU]\NïDG]LH MHVWMXĝXWZRU]RQDNROHNFMD NodeList]DSRPRFÈSÚWOLfor SU]HSURZDG]DQDMHVWLWHUDFMD SU]H]ZV]\VWNLHHOHPHQW\ NROHNFML
var hotItems GRFXPHQWTXHU\6HOHFWRU$OOijOLKRWij for (var i = 0; i < KRW,WHPVOHQJWK; i++) { KRW,WHPV>L@FODVV1DPH ijFRROij }
210
Zmienna hotItems]DZLHUD NROHNFMÚNodeList8PLHV]F]RQRZQLHMZV]\VWNLHHOHPHQW\ OLVW\NWöU\FKDWU\EXWFODVV ma ZDUWRĂÊhot(OHPHQW\]RVWDï\ Z\EUDQH]DSRPRFÈZ\ZRïDQLD metody TXHU\6HOHFWRU$OO .
PORUSZANIE SIĘ PO MODELU DOM .LHG\PDV]ZÚ]HïHOHPHQWXPRĝHV]Z\EUDÊLQQ\SRZLÈ]DQ\ ]QLPHOHPHQWZ\NRU]\VWXMÈFZW\PFHOXSLÚÊZïDĂFLZRĂFL 1D]\ZDVLÚWRSRUXV]DQLHPVLÚSRPRGHOX'20 parentNode
PIERWSZY I OSTATNI ELEMENT POTOMNY Omawiane na kilku poprzednich VWURQDFKZïDĂFLZRĂFLPRJÈ ]ZUöFLÊQLHVSöMQHZ\QLNLJG\ PLÚG]\HOHPHQWDPL]QDMGXMÈ VLÚ]QDNLRGVWÚSX:SRQLĝV]\P SU]\NïDG]LH]DVWRVRZDQRQLHFR RGPLHQQHUR]ZLÈ]DQLHZNRG]LH +70/ĽQDZLDV]DP\NDMÈF\
WRQDMOHSLHMJG\HOHPHQW]DZLHUDMHG\QLHWHNVW EH]ĝDGQ\FKLQQ\FKHOHPHQWöZ 3UDFD]HOHPHQWHPQDGU]ÚGQ\P W ten VSRVöEPRĝQDX]\VNDÊGRVWÚSGRMHJRZÚ]ïöZ WHNVWRZ\FKLHOHPHQWöZSRWRPQ\FK6SUDZG]D VLÚWRQDMOHSLHMJG\HOHPHQWSRVLDGDZÚ]ï\ WHNVWRZHLUöZQRU]ÚGQHHOHPHQW\SRWRPQH
ZÚ]ïHPWHNVWRZ\P]DZLHUDMÈF\PVïRZRV]HĂÊ. 3RVLDGDHOHPHQWUöZQRU]ÚGQ\NWöU\MHVW ZÚ]ïHPHOHPHQWXGOD. Z kolei ten ZÚ]HïHOHPHQWXSRVLDGDpotomnyZÚ]Hï WHNVWRZ\]DZLHUDMÈF\VïRZRĂZLHĝH. 1DNRñFXLVWQLHMHZÚ]HïWHNVWRZ\]DZLHUDMÈF\ VïRZRğJ-HVWWRHOHPHQWUöZQRU]ÚGQ\]DUöZQR GODZÚ]ïDWHNVWRZHJRVïRZDV]HĂÊMDNLZÚ]ïD elementu .
ELEMENT NADRZĘDNY *G\SUDFXMHV]]ZÚ]ïHPHOHPHQWX]DPLDVWMHJR ZÚ]ïHPWHNVWRZ\P HOHPHQWWHQPRĝH]DZLHUDÊ NRG]QDF]QLNöZ0RĝHV]]GHF\GRZDÊF]\UöZQLHĝ SR]DWHNVWHPFKFHV]SREUDÊOXEXDNWXDOQLÊWHQ NRG]QDF]QLNöZ WŁAŚCIWOŚĆ
.LHG\Z\PLHQLRQHZïDĂFLZRĂFLVÈXĝ\ZDQHGR XDNWXDOQLHQLD]DZDUWRĂFLHOHPHQWXQRZD]DZDUWRĂÊEÚG]LHQDGSLV\ZDÊFDïÈ]DZDUWRĂÊHOHPHQWX ]DUöZQRWHNVWMDNLNRG]QDF]QLNöZ 1DSU]\NïDGMHĝHOLGRZROQD]W\FKZïDĂFLZRĂFL ]RVWDQLHXĝ\WDGRXDNWXDOQLHQLD]DZDUWRĂFL elementu WRXDNWXDOQLRQD]RVWDQLHFDïD VWURQDLQWHUQHWRZD
OBIEKTOWY MODEL DOKUMENTU
219
UZYSKANIE DOSTĘPU DO WĘZŁA TEKSTOWEGO ZA POMOCĄ WŁAŚCIWOŚCI NODEVALUE I JEGO UAKTUALNIENIE *G\Z\ELHU]HP\ZÚ]HïWHNVWRZ\EÚG]LHP\PRJOLSREUDÊMHJR]DZDUWRĂÊ L]PRG\ğNRZDÊMÈ]DSRPRFÈZïDĂFLZRĂFLnodeValue.
]RVWDMHZ\EUDQ\]D SRPRFÈPHWRG\getElementById(). 2. Pierwszym elementem potomnym
MHVW element . 3. :Ú]HïWHNVWRZ\MHVWQDVWÚSQ\PHOHPHQWHP UöZQRU]ÚGQ\P tego elementu . 4. 0DV]ZÚ]HïWHNVWRZ\LGODWHJRGRVWÚSGR MHJR]DZDUWRĂFLPRĝHV]X]\VNDÊ]DSRPRFÈ ZïDĂFLZRĂFLnodeValue.
UZYSKANIE DOSTĘPU DO WĘZŁA TEKSTOWEGO I JEGO ZMIANA $E\PöFSUDFRZDÊ]WHNVWHP ZHOHPHQFLHQDMSLHUZWU]HED X]\VNDÊGRVWÚSGRZÚ]ïD HOHPHQWXDQDVWÚSQLHGRMHJR ZÚ]ïDWHNVWRZHJR
YDULWHP7ZR GRFXPHQWJHW(OHPHQW%\,GijWZRij // Pobranie drugiego elementu listy. YDUHO7H[W LWHP7ZRğUVW&KLOGQRGH9DOXH3REUDQLHMHJR]DZDUWRĂFLWHNVWRZHM HO7H[W HO7H[WUHSODFHijRU]HV]NLSLQLRZHijijNDSXVWDij // Zmiana orzeszki piniowe na kapusta. LWHP7ZRğUVW&KLOGQRGH9DOXH HO7H[W// Uaktualnienie elementu listy.
WYNIK
:RPDZLDQ\PSU]\NïDG]LHSRELHUDP\WHNVW GUXJLHJRHOHPHQWXOLVW\L]PLHQLDP\JR ]ZDUWRĂFLRU]HV]NLSLQLRZH na kapusta. :LHUV]SLHUZV]\VNU\SWXSRELHUDGUXJL HOHPHQWOLVW\U]HF]\GRNXSLHQLDLSU]HFKRZXMHJRZ]PLHQQHMRQD]ZLHLWHP7ZR. 1DVWÚSQLH]DZDUWRĂÊWHNVWRZÈHOHPHQWX XPLHV]F]DP\Z]PLHQQHMelText. :LHUV]WU]HFLVNU\SWX]DVWÚSXMHZ\UDĝHQLH RU]HV]NLSLQLRZHVïRZHPkapusta Xĝ\ZDMÈFGRWHJRPHWRG\UHSODFH obiektu String. 2VWDWQLZLHUV]VNU\SWXZ\NRU]\VWXMHZïDĂFLZRĂÊnodeValueZFHOXXDNWXDOQLHQLDZÚ]ïD WHNVWRZHJRQRZÈZDUWRĂFLÈ
OBIEKTOWY MODEL DOKUMENTU 221
UZYSKANIE DOSTĘPU DO TEKSTU I JEGO UAKTUALNIENIE ZA POMOCĄ WŁAŚCIWOŚCI TEXTCONTENT (I INNERTEXT) :ïDĂFLZRĂÊtextContentSR]ZDODQDSRELHUDQLHOXEXDNWXDOQLDQLHWHNVWX ]QDMGXMÈFHJRVLÚZHOHPHQFLHRUD]MHJRHOHPHQWDFKSRWRPQ\FK textContent :FHOXSREUDQLDWHNVWX]HOHPHQWöZ
w omaZLDQ\PSU]\NïDG]LHL]LJQRURZDQLDFDïHJRNRGX ]QDF]QLNöZZHOHPHQFLH PRĝQDXĝ\ÊZïDĂFLZRĂFL textContentHOHPHQWXQDGU]ÚGQHJR]DZLHUDMÈFHgo dane elementy
UZYSKANIE DOSTĘPU JEDYNIE DO $E\SRND]DÊUöĝQLFÚPLÚG]\ VSRVREHPG]LDïDQLDZïDĂFLZRĂFL textContent i innerText ZSRQLĝV]\PSU]\NïDG]LH]DVWRVRZDQRUHJXïÚ&66XNU\ZDMÈFÈ ]DZDUWRĂÊHOHPHQWX.
1DSRF]ÈWNXVNU\SWSRELHUD ]DZDUWRĂÊSLHUZV]HJRHOHPHQWX OLVW\Xĝ\ZDMÈFGRWHJRREX ZïDĂFLZRĂFLtextContent i innerText1DVWÚSQLHSREUDQH ZDUWRĂFLVÈZ\ĂZLHWODQH]DOLVWÈ
DODANIE LUB USUNIĘCIE ZAWARTOŚCI HTML 0DP\GZD]XSHïQLHRGPLHQQHSRGHMĂFLDZ]DNUHVLHGRGDZDQLDLXVXZDQLD ]DZDUWRĂFLZGU]HZLHPRGHOX'20ZïDĂFLZRĂÊinnerHTMLLRSHUDFMH na modelu DOM.
METODY OPERACJI NA MODELU DOM 2SHUDFMHQDPRGHOX'20PRJÈE\ÊEH]SLHF]QLHMV]HQLĝXĝ\FLHZïDĂFLZRĂFLinnerHTMLDOHWDNLH UR]ZLÈ]DQLHZ\PDJD]QDF]QLHZLÚNV]HMLORĂFLNRGXLPRĝHE\ÊZROQLHMV]H
'RGDMQRZ\IUDJPHQW GRZ\EUDQHJRZF]HĂQLHM elementu. ul
li
li
li
li
li
tekst
tekst
tekst
tekst
tekst
li tekst OBIEKTOWY MODEL DOKUMENTU 225
UZYSKANIE DOSTĘPU DO (I UAKTUALNIENIE) TEKSTU ORAZ KODU ZNACZNIKÓW ZA POMOCĄ WŁAŚCIWOŚCI INNERHTML 8ĝ\ZDMÈFZïDĂFLZRĂFLinnerHTMLPRĝHV]X]\VNDÊGRVWÚSGR]DZDUWRĂFL HOHPHQWXLPLHÊPRĝOLZRĂÊMHM]PRG\ğNRZDQLD RUD]ZV]\VWNLFKMHJR HOHPHQWöZSRWRPQ\FK innerHTML *G\ZïDĂFLZRĂÊinnerHTMLSRELHUD NRG+70/]HOHPHQWXWRSRELHUD ]DZDUWRĂÊWHJRHOHPHQWXL]ZUDFD MÈZSRVWDFLMHGQHJRGïXJLHJRFLÈJX WHNVWRZHJRïÈF]QLH]FDï\PNRGHP ]QDF]QLNöZMDNLPRĝH]QDMGRZDÊVLÚ ZW\PHOHPHQFLH .LHG\ZïDĂFLZRĂÊWDMHVWXĝ\ZDQD GRXVWDZLHQLDQRZHM]DZDUWRĂFLGOD HOHPHQWXSRELHUDFLÈJWHNVWRZ\ NWöU\PRĝH]DZLHUDÊNRG]QDF]QLNöZ 1DVWÚSQLHSU]HWZDU]DWHQFLÈJ WHNVWRZ\LGRGDMHZV]\VWNLH]QDMGXMÈFHVLÚZQLPHOHPHQW\GRGU]HZD modelu DOM. *G\GRGDMHV]QRZÈ]DZDUWRĂÊ]D SRPRFÈinnerHTMLPXVLV]SDPLÚWDÊ ĝHSRPLQLÚFLHFKRÊMHGQHJR]QDF]QLND ]DP\NDMÈFHJRPRĝHVSRZRGRZDÊ ]QLV]F]HQLHSURMHNWXFDïHMVWURQ\ &RJRUV]DMHĝHOLZïDĂFLZRĂÊ innerHTMLMHVWXĝ\ZDQDGRGRGDZDQLD]DZDUWRĂFLXWZRU]RQHMQDVWURQLH SU]H]Xĝ\WNRZQLNöZVNXWNLHPPRĝH E\ÊGRGDQLH]DZDUWRĂFL]DZLHUDMÈFHM NRGR]ïRĂOLZ\PG]LDïDQLXSDWU] SRGUR]G]LDïķ$WDNLW\SX;66ĵ 226 OBIEKTOWY MODEL DOKUMENTU
DODANIE ELEMENTÓW ZA POŚREDNICTWEM OPERACJI NA MODELU DOM 2SHUDFMHQDPRGHOX'20WRLQQDWHFKQLNDGRGDZDQLDQRZHM]DZDUWRĂFL QDVWURQLHLQQDQLĝGRGDZDQLHQRZHM]DZDUWRĂFL]DSRPRFÈZïDĂFLZRĂFL innerHTML 2EHMPXMHWU]\Z\PLHQLRQHSRQLĝHMNURNL
*G\]RVWDQLHXWZRU]RQ\ ZÚ]HïHOHPHQWXQLHVWDQRZLRQ MHV]F]HF]ÚĂFLGU]HZDPRGHOX '20ĽEÚG]LHGRGDQ\GRSLHUR w kroku 3.
:SU]\NïDG]LHQDNRñFX UR]G]LDïX]REDF]\V]LQQÈPHWRGÚ]DNWöUHMSRPRFÈPRĝQD XPLHĂFLÊHOHPHQWZGU]HZLH PRGHOX'20%ÚG]LHWRPHWRGD insertBefore()SU]H]QDF]RQD do dodawania nowego elemenWXSU]HGZVND]DQ\PZÚ]ïHP DOM.
DODANIE ELEMENTU W DRZEWIE MODELU DOM Metoda FUHDWH(OHPHQW SRZRGXMHXWZRU]HQLHHOHPHQWXNWöU\PRĝQDXPLHĂFLÊ ZGU]HZLHPRGHOX'20 :RPDZLDQ\PSU]\NïDG]LHMHVW WRSXVW\HOHPHQW
Metoda FUHDWH7H[W1RGH SR]ZDODQDXWZRU]HQLHQRZHJR ZÚ]ïDWHNVWRZHJRZFHOXMHJR GRïÈF]HQLDGRHOHPHQWX:Ú]Hï WHNVWRZ\MHVWSU]HFKRZ\ZDQ\ Z]PLHQQHMQHZ7H[W.
FMVDGGHOHPHQWMV
JAVASCRIPT
// Utworzenie nowego elementu i przechowywanie go w zmiennej. YDUQHZ(O GRFXPHQWFUHDWH(OHPHQWijOLij 8WZRU]HQLHZÚ]ïDWHNVWRZHJRLSU]HFKRZ\ZDQLHJRZ]PLHQQHM YDUQHZ7H[W GRFXPHQWFUHDWH7H[W1RGHijNRPRVDU\ĝRZDij 'RïÈF]HQLHQRZHJRZÚ]ïDWHNVWRZHJRGRQRZHJRHOHPHQWX QHZ(ODSSHQG&KLOGQHZ7H[W :\V]XNDQLHPLHMVFDZNWöU\PSRZLQLHQE\ÊGRGDQ\QRZ\HOHPHQW YDUSRVLWLRQ GRFXPHQWJHW(OHPHQWV%\7DJ1DPHijXOij >@ // Wstawienie nowego elementu we wskazanym miejscu. SRVLWLRQDSSHQG&KLOGQHZ(O
WYNIK
:Ú]HïWHNVWRZ\]RVWDQLH]DSRPRFÈPHWRG\ appendChild()GRGDQ\GRQRZHJRZÚ]ïD elementu. Metoda getElementsByTagName() wybiera ZGU]HZLHPRGHOX'20SRïRĝHQLHZNWöU\P ]RVWDQLHZVWDZLRQ\QRZ\HOHPHQWWREÚG]LH SLHUZV]\HOHPHQW
Metoda removeChild() MHVWXĝ\ZDQDZ]PLHQQHM SU]HFKRZXMÈFHMQD]ZÚZÚ]ïD QDGU]ÚGQHJR :\PDJDSRGDQLDMHGQHJR SDUDPHWUXMDNLPMHVWHOHPHQW SU]H]QDF]RQ\GRXVXQLÚFLD SU]HFKRZ\ZDQ\ZGUXJLHM ]PLHQQHM ul li
li
li
li
ELEMENT NADRZĘDNY ELEMENT PRZEZNACZONY DO USUNIĘCIA
CO MOŻE ZROBIĆ ATAKUJĄCY? JAK DOCHODZI DO ATAKU TYPU XSS? :SU]\SDGNXDWDNXW\SX;66DWDNXMÈF\XPLHV]F]D ZZLWU\QLHLQWHUQHWRZHMNRGR]ïRĂOLZ\PG]LDïDQLX :LWU\Q\F]ÚVWRRIHUXMÈ]DZDUWRĂÊSU]\JRWRZDQÈ SU]H]ZLHOHUöĝQ\FKRVöE1DSU]\NïDG Xĝ\WNRZQLF\PRJÈWZRU]\ÊSURğOHLGRGDZDÊ NRPHQWDU]H ZLHOXDXWRUöZPRĝHSUDFRZDÊQDGSXEOLNRZDQ\PLDUW\NXïDPL GDQHPRJÈSRFKRG]LÊ]ZLWU\QWU]HFLFKWDNLFK MDN)DFHERRN7ZLWWHUNDQDï\LQIRUPDF\MQH LLQQH Xĝ\WNRZQLNPRĝHPLHÊPRĝOLZRĂÊSU]HND]\ZDQLDSOLNöZQDSU]\NïDG]GMÚÊOXENOLSöZZLGHR
• • • •
'DQHQDGNWöU\PLQLHPDV]NRQWUROLVÈRNUHĂODQH mianem GDQ\FKQLH]DXIDQ\FKLPXV]ÈE\Ê REVïXJLZDQH]]DFKRZDQLHPGXĝHMRVWURĝQRĂFL
NAWET PROSTY KOD MOŻE POWODOWAĆ PROBLEMY .RGR]ïRĂOLZ\PG]LDïDQLXïÈF]\ZVRELH+70/L-DYD6FULSWFKRÊWRDGUHV\85/LVW\OH&66PRJÈE\Ê Z\NRU]\VWDQHGR]DLQLFMRZDQLDDWDNöZW\SX;66 'ZDSRQLĝV]HSU]\NïDG\SRND]XMÈĝHQDZHWFDïNLHP SURVW\NRGPRĝHSRPöFDWDNXMÈFHPXZX]\VNDQLXGRVWÚSXGRNRQWDXĝ\WNRZQLND 3LHUZV]\SU]\NïDGSRZRGXMHXVWDZLHQLHGDQ\FKFRRNLHZ]PLHQQHMQDVWÚSQLHPRĝQDMHSU]HND]DÊGR ]XSHïQLHLQQHJRVHUZHUD VFULSW!YDUDGU ijKWWSH[DPSOHFRP[VVSKS"FRRNLH ijHVFDSHGRFXPHQWFRRNLH VFULSW! =NROHLSRQLĝV]\NRGSRND]XMHMDNEUDNXMÈF\REUD]PRĝHE\ÊXĝ\W\ZUD]]DWU\EXWHP+70/GR]DLQLFMRZDQLDG]LDïDQLD]ïRĂOLZHJRNRGX LPJVUF ĵKWWSQRğOHĵRQHUURU ĵDGU ijKWWSH[DPSOHFRP[VVSKS"ijHVFDSHGRFXPHQWFRRNLH ĵ;> .DĝG\NRG+70/]QLH]DXIDQHJRěUöGïDRWZLHUDPRĝOLZRĂÊSU]HSURZDG]HQLDDWDNXW\SX;66-HGQDN ]DJURĝHQLHMHVW]ZLÈ]DQHW\ONR]QLHNWöU\PL]QDNDPL 234 OBIEKTOWY MODEL DOKUMENTU
OCHRONA PRZED ATAKAMI TYPU XSS WERYFIKACJA DANYCH WEJŚCIOWYCH DOSTARCZANYCH SERWEROWI 1.2GZLHG]DMÈF\PZLWU\QÚ SR]ZDODMQDXĝ\ZDQLHW\ONR W\FK]QDNöZNWöUHVÈSRWU]HEQH ZFHOXGRVWDUF]HQLDLQIRUPDFML 1D]\ZDVLÚWRZHU\ğNDFMÈ. Nie SR]ZDODMQLH]DXIDQ\PXĝ\WNRZQLNRPQDSU]HND]\ZDQLH ]QDF]QLNöZ+70/OXENRGX -DYD6FULSW
Żądania stron z serwera WWW i dane przekazywane do tego serwera
Pobranie informacji z przeglądarki i przekazanie ich do bazy danych
Przechowywanie informacji utworzonych przez administratorów i użytkowników witryny
PRZEGLĄDARKA Przetwarzanie plików HTML, CSS i JavaScript pochodzących z serwera WWW
SERWER WWW Wygenerowanie stron na podstawie danych pochodzących z bazy danych oraz wstawienie ich w szablonach
BAZA DANYCH Zwrot zawartości wymaganej do utworzenia stron internetowych
ZNEUTRALIZOWANIE DANYCH POCHODZĄCYCH Z SERWERA I BAZY DANYCH 6..LHG\GDQHRSXV]F]ÈED]Ú GDQ\FKZV]\VWNLHSRWHQFMDOQLH QLHEH]SLHF]QH]QDNLSRZLQQ\ E\Ê]QHXWUDOL]RZDQHSDWU] SRGUR]G]LDïķ;66Ľ]QHXWUDOL]RZDQLHLNRQWUROD]QDF]QLNöZĵ
TRADYCYJNE PROCEDURY OBSŁUGI ZDARZEŃ W MODELU DOM :V]\VWNLHQRZRF]HVQHSU]HJOÈGDUNLLQWHUQHWRZHSRWUDğÈREVïXJLZDÊWHQ VSRVöEWZRU]HQLDSURFHGXUREVïXJL]GDU]HñDOHGRNDĝGHM]QLFKPRĝQD GRïÈF]\ÊW\ONRMHGQÈIXQNFMÚ 3RQLĝHMSU]HGVWDZLRQRVNïDGQLÚGRïÈF]DQLD]GDU]HQLDGRHOHPHQWX]D SRPRFÈSURFHGXU\REVïXJL]GDU]Hñ:VND]\ZDQDMHVWIXQNFMDNWöUD SRZLQQD]RVWDÊZ\NRQDQDSRZ\VWÈSLHQLXGDQHJR]GDU]HQLD
element.onzdarzenie = nazwaFunkcji; ELEMENT
ZDARZENIE
KOD
Węzeł elementu w modelu DOM.
Poprzedzone przedrostkiem on zdarzenie dołączone do węzła.
Nazwa funkcji przeznaczonej do wywołania (bez nawiasu na końcu).
function checkUsername() { .RGVSUDZG]DMÈF\OLF]EÚ]QDNöZZQD]ZLHXĝ\WNRZQLND } var el = document.getElementById(’username’); el.onblur = checkUsername; Nazwa zdarzenia jest poprzedzona przedrostkiem on.
Na początku kodu znajduje się definicja nazwanej funkcji.
Funkcja jest wywoływana przez procedurę obsługi zdarzeń w ostatnim wierszu, ale nawias został pominięty.
Dodaje ona obserwatora zdarzeń do węzła elementu w modelu DOM. METODA
element.addEventListener(’zdarzenie’, nazwaFunkcji > ZDUWRĂÊBERRORZVND]); ELEMENT
ZDARZENIE
KOD
PRZEPŁYW ZDARZEŃ
Węzeł elementu w modelu DOM.
Zdarzenie dołączane do węzła, ujęte w znaki cytowania.
Nazwa funkcji przeznaczonej do wywołania.
Wskazuje sposób przepływu zdarzeń. Najczęściej ma przypisaną wartość false (patrz podrozdział „Przepływ zdarzeń”).
Odniesienie do węzła elementu w modelu DOM jest często przechowywane w zmiennej.
function checkUsername() { .RGVSUDZG]DMÈF\OLF]EÚ]QDNöZZQD]ZLHXĝ\WNRZQLND } var el = document.getElementById(’username’); el.addEventListener(’blur’, checkUsername, false); Nazwa zdarzenia jest ujęta w znaki cytowania.
Na początku kodu znajduje się definicja nazwanej funkcji.
Funkcja jest wywoływana przez obserwatora zdarzeń w ostatnim wierszu, ale nawias został pominięty.
var elUsername = document.getElementById(’username’); 3REUDQLHSRODWHNVWRZHJRXVHUQDPH var elMsg = document.getElementById(’feedback’); // Pobranie elementu feedback. function checkUsername(minLength) { if (elUsername.value.length < minLength) {
function checkUsername(e) { 3 var target = e.target; 3REUDQLHHOHPHQWXGRFHORZHJRGOD]GDU]HQLD } var el = document.getElementById(’username’); el.addEventListener(’blur’, checkUsername, false); 1
OBIEKT ZDARZENIA W PRZEGLĄDARCE INTERNET EXPLORER 5 – 8 3RQLĝHMSU]HGVWDZLRQRMDNRELHNWeventPRĝQDX]\VNDÊZSU]HJOÈGDUFH ,(ļNieMHVWRQSU]HND]\ZDQ\DXWRPDW\F]QLHGRIXQNFMLSURFHGXU\ REVïXJLOXEREVHUZDWRUD]GDU]HñDOHjestGRVWÚSQ\MDNRHOHPHQW SRWRPQ\RELHNWXwindow :NRG]LHSRSUDZHMVWURQLHSROHFHQLHifVSUDZG]DF]\RELHNWevent]RVWDïSU]HND]DQ\IXQNFML -DNPRJïHĂ]REDF]\ÊZUR]G]LDOHZSRGUR]G]LDOHķ6SUDZG]HQLHUöZQRĂFLLLVWQLHQLDĵLVWQLHQLH RELHNWXMHVWWUDNWRZDQHMDNRZDUWRĂÊtruthy 'ODWHJRWHĝZDUXQHNPRĝQDRGF]\WDÊQDVWÚSXMÈFR ķ-HĝHOLRELHNW]GDU]HQLDnie istniejeĮĵ
function checkUsername(e) { if (!e) { e = window.event; } }
POBRANIE WŁAŚCIWOŚCI *G\RWU]\PDP\RGQLHVLHQLHGRRELHNWXevent GRVWÚSGRMHJRZïDĂFLZRĂFLPRĝQDX]\VNDÊ ZVSRVöESRND]DQ\ZNRG]LHSRSUDZHMVWURQLH 7HFKQLNDWDG]LDïDUöZQLHĝZSU]\SDGNXV]\ENLHJR REOLF]DQLDZDUWRĂFLSDWU]UR]G]LDïSRGUR]G]LDï ķ3U]HUZDQLHREOLF]DQLDZDUWRĂFLĵ
var target; target = e.target || e.srcElement;
FUNKCJA POBIERAJĄCA ELEMENT DOCELOWY DLA ZDARZENIA -HĝHOLREVHUZDWRUD]GDU]HñWU]HEDSU]\SLVDÊNLONX HOHPHQWRPPRĝQDWR]URELÊ]DSRPRFÈNRGX SU]HGVWDZLRQHJRSRSUDZHMVWURQLH-HVWWRIXQNFMD ]ZUDFDMÈFDRGQLHVLHQLHGRHOHPHQWXZNWöU\P Z\VWÈSLïR]GDU]HQLH
270 ZDARZENIA
function getEventTarget(e) { if (!e) { e = window.event; } return e.target || e.srcElement; }
UŻYCIE OBSERWATORA ZDARZEŃ WRAZ Z OBIEKTEM EVENT 3RQLĝHMSU]HGVWDZLRQRSU]\NïDGZ\NRU]\VW\ZDQ\ GRWÈGZUR]G]LDOHDOH]SHZQ\PLPRG\ğNDFMDPL )XQNFMDQRVLQD]ZÚcheckLength()]DPLDVW checkUsername()LPRĝHE\ÊXĝ\WDZGRZROQ\P SROXWHNVWRZ\P 2ELHNWeventMHVWSU]HND]\ZDQ\GRREVHUZDWRUD]GDU]Hñ2PDZLDQ\SU]\NïDG]DZLHUD UR]ZLÈ]DQLHDZDU\MQHGODSU]HJOÈGDUHNLQWHUQHWRZ\FK,(ļZUR]G]LDOH]DGHPRQVWURZDQR ]DVWRVRZDQLHIXQNFMLSRPRFQLF]HMGRWHJRFHOX $E\RNUHĂOLÊHOHPHQW\Xĝ\ZDQHSU]H] LQWHUQDXWÚIXQNFMDZ\NRU]\VWXMHZïDĂFLZRĂÊ targetRELHNWXeventZSU]HJOÈGDUNDFK,(ļ VWRVRZDQDMHVW]NROHLZïDĂFLZRĂÊsrcElement
JAVASCRIPT function checkLength(e, minLength) { var el, elMsg; if (!e) { e = window.event; } el = e.target || e.srcElement; elMsg = el.nextSibling; if (el.value.length < minLength) {
DODATKOWE KORZYŚCI WYNIKAJĄCE Z DELEGACJI ZDARZEŃ DZIAŁANIE Z NOWYMI ELEMENTAMI -HĝHOLZGU]HZLHPRGHOX'20 ]RVWDQÈXPLHV]F]RQHQRZH HOHPHQW\QLHWU]HEDEÚG]LH GRGDZDÊGRQLFKSURFHGXU REVïXJL]GDU]HñSRQLHZDĝ ]DGDQLHWR]RVWDïRGHOHJRZDQH GRHOHPHQWXQDGU]ÚGQHJR
272 ZDARZENIA
WYELIMINOWANIE OGRANICZEŃ ZWIĄZANYCH ZE SŁOWEM KLUCZOWYM THIS :HZF]HĂQLHMV]HMF]ÚĂFL UR]G]LDïXVïRZRNOXF]RZHthis ]RVWDïRXĝ\WHGRLGHQW\ğNDFML HOHPHQWXGRFHORZHJRGOD ]GDU]HQLD-HGQDNWHFKQLND WDQLHG]LDïDZSU]HJOÈGDUFH ,(OXEMHĂOLIXQNFMDZ\PDJD SDUDPHWUöZ
UPROSZCZENIE KODU 'RXWZRU]HQLDMHVWPQLHMV]D OLF]EDIXQNFML3RQDGWRPQLHMV]D OLF]EDZDUVWZZ\VWÚSXMHPLÚG]\ PRGHOHP'20LNRGHPFR XïDWZLDREVïXJÚLNRQVHUZDFMÚ
ZMIANA ZACHOWANIA DOMYŚLNEGO 2ELHNWeventSRVLDGDPHWRG\SR]ZDODMÈFHQD]PLDQÚGRP\ĂOQHJR]DFKRZDQLDHOHPHQWXRUD]QD]PLDQÚVSRVREXZMDNLHOHPHQW\QDGU]ÚGQHHOHPHQWX RGSRZLDGDMÈQD]GDU]HQLH preventDefault()
.RQğJXUDFMDREVHUZDWRUD]GDU]HñZ\ZRïDQLHLWHP'RQH ZRGSRZLHG]L // na zdarzenie click. var el = document.getElementById(’shoppingList’); 3REUDQLHOLVW\U]HF]\GR // kupienia. if (el.addEventListener) { -HĝHOLREVHUZDWRU]GDU]HñMHVW REVïXJLZDQ\ el.addEventListener(’click’, function(e) { 'RGDQLHREVHUZDWRUD itemDone(e); :\ZRïDQLHLWHP'RQH }, false); 8ĝ\FLHSURSDJDFML]GDU]HQLD } else { // W przeciwnym razie. el.attachEvent(’onclick’, function(e){ 8ĝ\FLHVWDUHJRPRGHOX,( // onclick. itemDone(e); :\ZRïDQLHLWHP'RQH }); }
ZDARZENIA 275
W KTÓRYM ELEMENCIE WYSTĄPIŁO ZDARZENIE? 3RGF]DVZ\ZRï\ZDQLDIXQNFMLXĝ\FLHZïDĂFLZRĂFLtargetRELHNWXevent WRQDMOHSV]\VSRVöEXVWDOHQLDZNWöU\PHOHPHQFLHZ\VWÈSLïR]GDU]HQLH 7DNLHSRGHMĂFLH]RVWDïRSU]HGVWDZLRQHSRQLĝHMLRSLHUDVLÚQDVïRZLH NOXF]RZ\Pthis SŁOWO KLUCZOWE THIS 6ïRZRNOXF]RZHthisRGZRïXMHVLÚGRZïDĂFLFLHODIXQNFML :NRG]LHSRSUDZHMVWURQLH thisRGZRïXMHVLÚGRHOHPHQWX ZNWöU\PZ\VWÈSLïR]GDU]HQLH 7DNLHUR]ZLÈ]DQLHG]LDïDNLHG\ IXQNFMLQLHVÈSU]HND]\ZDQH ĝDGQHSDUDPHWU\LGODWHJRQLH MHVWZ\ZRï\ZDQD]SR]LRPX IXQNFMLDQRQLPRZHM
function checkUsername() { var elMsg = document.getElementById(’feedback’); if (this.value.length < 5) { HO0VJLQQHU+70/ ij1D]ZDXĝ\WNRZQLNDMHVW]E\WNUöWNDij } else { elMsg.innerHTML = ’’; } } var el = document.getElementById(’username’); el.addEventListener(’blur’, checkUsername, false); To jakby funkcja została zdefiniowana w tym miejscu, a nie gdzieś indziej.
PRZECHOWYWANIE ODNIESIEŃ DO OBIEKTÓW I WĘZŁÓW MODELU DOM 7DEOLFDURZV]DZLHUDRELHNW\RGZöFKSRZLÈ]DQ\FK]HVREÈZïDĂFLZRĂFLDFK 2GQLHVLHQLDGRRELHNWöZSU]HGVWDZLDMÈF\FKRVRE\ZWDEOLF\SHRSOH 2GQLHVLHQLDGRZLHUV]\SU]HGVWDZLDMÈF\FKWHRVRE\ZWDEHOLQDVWURQLH NROHNFMHM4XHU\ :NVLÈĝFHVSRWNDïHĂVLÚ]SU]\NïDGDPLZNWöU\FK ]PLHQQHE\ï\Xĝ\ZDQHZFHOXSU]HFKRZ\ZDQLD RGQLHVLHñGRZÚ]ïöZPRGHOX'20OXEHOHPHQWöZ Z\EUDQ\FKZM4XHU\]DPLDVWGZXNURWQHJRZ\ ELHUDQLDW\FKVDP\FKHOHPHQWöZ 7DNLHSRGHMĂFLH QRVLQD]ZÚbuforowania
Utworzenie zmiennych: URZV: tablica pozwalająca na połączenie poszczególnych osób z odpowiadającymi im wierszami tabeli na stronie $min i PD[: dane wejściowe w postaci minimalnej i maksymalnej stawki WDEOH: tutaj znajduje się tabela zawierająca informacje o dopasowanych osobach
2
FUNKCJA: PDNH5RZV Utworzenie wierszy tabeli oraz wypełnienie tablicy URZV
3
Iteracja przez obiekty w tablicy SHRSOH FUNKCJA ANONIMOWA Utworzenie obiektu URZ przechowującego element
Dodanie elementów
zawierających imię i stawkę Dodanie nowego obiektu do tablicy URZV Dodanie odniesień do person i URZ
4 5 6
Przejście do kolejnego obiektu tablicy SHRSOH
FUNKCJA: DSSHQG5RZV dodaje wiersze do Utworzenie elementu przeznaczonego na elementy
7
Iteracja przez obiekty w tablicy URZV Dodanie URZ do elementu $tbody
8
Przejście do kolejnego obiektu tablicy URZV
9
Dodanie elementu do WDEOH!
FUNKCJA: update() uaktualnia zawartość tabeli
10
Iteracja przez obiekty w tablicy URZV
12
Czy UDWH! min i rate PD[?
Ukryj wiersz
11
Wyświetl wiersz
Przejście do kolejnego obiektu tablicy URZV
FUNKCJA: init() konfiguracja skryptu
13
Konfiguracja VOLGHU Wywołanie PDNH5RZV , DSSHQG5RZV i update()
WYSZUKIWANIE :\V]XNLZDQLHSU]\SRPLQDğOWURZDQLHDOHZ\ĂZLHWODQHVÈMHG\QLHZ\QLNL GRSDVRZDQHGRSRGDQHJRZ\UDĝHQLD:W\PSU]\NïDG]LHSR]QDV]WDN]ZDQÈ WHFKQLNÚOLYHVHDUFK3RGF]DVZ\V]XNLZDQLD]DPLDVWWDJöZXĝ\ZDQ\WHNVWX ZDWU\EXFLHDOWREUD]öZ WYSZUKIWANIE W ATRYBUCIE ALT OBRAZÓW
ITERACJA PRZEZ TABELĘ Utworzenie zmiennych: WDEOH: element WDEOH! $tbody: element FRQWUROV: elementy
URZV: tablica elementów
Zdarzenie: FOLFN w elemencie
6
FUNKCJA ANONIMOWA: Sortuje dane na podstawie nagłówka klikniętej kolumny
7 8 9
Utworzenie zmiennych (na podstawie klikniętego nagłówka kolumny) header: nagłówek klikniętej kolumny order: wartość atrybutu GDWDVRUW FROXPQ: indeks nagłówka klikniętej kolumny
Czy atrybut FODVV ma wartość DVFHQGLQJ, czy GHVFHQGLQJ?
10
N
13
Do elementu
dodaj atrybut FODVV o wartości DVFHQGLQJ
11
Wartość atrybutu FODVV zmień na przeciwną
14
Usuń wartość DVFHQGLQJ lub GHVFHQGLQJ z pozostałych nagłówków
12
Odwróć kolejność wierszy w tabeli
15
N
Czy obiekt compare ma wartość dopasowaną do zmiennej order?
T
16
Zmienna FROXPQ otrzymuje numer indeksu klikniętego elementu
17
Sortowanie tablicy URZV za pomocą funkcji porównującej
18
a to tekst z pierwszego porównywanego wiersza, natomiast b to tekst z drugiego wiersza
19
Użycie obiektu compare do porównania a i b za pomocą metody wskazanej w zmiennej order
PODSUMOWANIE FILTROWANIE, WYSZUKIWANIE I SORTOWANIE f 7DEOLFHVÈQDMF]ÚĂFLHMXĝ\ZDQHGRSU]HFKRZ\ZDQLD]ELRUX RELHNWöZ f 7DEOLFHRIHUXMÈSU]\GDWQHPHWRG\SR]ZDODMÈFHQDGRGDZDQLH XVXZDQLHğOWURZDQLHLVRUWRZDQLH]QDMGXMÈF\FKVLÚZQLFK HOHPHQWöZ f )LOWURZDQLHXPRĝOLZLDXVXQLÚFLHHOHPHQWöZLZ\ĂZLHWOHQLH MHG\QLHLFKSRG]ELRUXQDSRGVWDZLHZVND]DQ\FKNU\WHULöZ f )LOWURZDQLHF]ÚVWRRSLHUDVLÚQDZïDVQ\FKIXQNFMDFKNWöUH VSUDZG]DMÈF]\HOHPHQW\VSHïQLDMÈGDQHNU\WHULD f :\V]XNLZDQLHSR]ZDODQDSU]HSURZDG]HQLHğOWURZDQLDQD SRGVWDZLHGDQ\FKZSURZDG]RQ\FKSU]H]Xĝ\WNRZQLND f 6RUWRZDQLHSR]ZDODQD]PLDQÚNROHMQRĂFLHOHPHQWöZZWDEOLF\ f -HĝHOLFKFHV]]\VNDÊNRQWUROÚQDGNROHMQRĂFLÈZMDNLHMVÈ VRUWRZDQHHOHPHQW\PRĝHV]Xĝ\ÊIXQNFMLSRUöZQ\ZDQLD f $E\]DSHZQLÊREVïXJÚVWDUV]\FKSU]HJOÈGDUHNLQWHUQHWRZ\FK PRĝQDZ\NRU]\VWDÊVNU\SW(&0$6FULSW6KLP
var form = document. getElementById(’login’); var elements = form.elements; var elUsername = elements.username; var elMain = document. getElementById(’main’); addEvent(form, ’submit’, function(e) { e.preventDefault(); var msg = ’Witaj, ’ + elUsername.value; elMain.textContent = msg; });
USPRAWNIENIA I WERYFIKACJA FORMULARZY SIECIOWYCH
ZMIANA RODZAJU ELEMENTU
:W\PSU]\NïDG]LHSRGSROHPWHNVWRZ\P VïXĝÈF\PGRSRGDQLDKDVïDXPLHĂFLP\SROH Z\ERUX-HĝHOLXĝ\WNRZQLNMH]D]QDF]\KDVïR VWDQLHVLÚZLGRF]QH-HVWWRPRĝOLZHG]LÚNLXĝ\FLX ZïDĂFLZRĂFL-DYD6FULSWRQD]ZLHtypeL]PLDQLH URG]DMXHOHPHQWX z passwordQDtext :ïDĂFLZRĂÊtypeZPRGHOX'20RGSRZLDGD DWU\EXWRZLtypeZ+70/
A. CZY ELEMENT MA ATRYBUT REQUIRED? 1. 3ROHFHQLHifXĝ\ZDIXQNFML RQD]ZLHLV5HTXLUHG do VSUDZG]HQLDF]\HOHPHQW ]DZLHUDDWU\EXWrequired )XQNFMDLV5HTXLUHG ]RVWDïD SRND]DQDQDVWURQLHSRSUDZHM -HĝHOLZ\PLHQLRQ\DWU\EXW ]QDMGXMHVLÚZHOHPHQFLH QDVWÈSLZ\NRQDQLHNROHMQHJR EORNXNRGX 6. -HĝHOLQLHNRGSU]HFKRG]L GRNURNXFRR]QDF]DĝH ]HOHPHQWHPZV]\VWNRMHVW ZSRU]ÈGNX
function isEmpty(el) { return !el.value || el.value === el.placeholder; }
USPRAWNIENIA I WERYFIKACJA FORMULARZY SIECIOWYCH
TWORZENIE KOMUNIKATU O BŁĘDZIE .RGRGSRZLHG]LDOQ\]DZHU\ğNDFMÚSU]HWZDU]DHOHPHQW\SRMHG\QF]R DZV]HONLHNRPXQLNDW\REïÚGDFKVÈSU]HFKRZ\ZDQH]DSRPRFÈ PHWRG\M4XHU\RQD]ZLH.data() JAK USTAWIANE SĄ BŁĘDY?
3. -HĝHOLZDUWRĂFLÈ]ZURWQÈ IXQNFMLMHVWtrueNRPXQLNDW REïÚG]LHMHVWXVXZDQ\ ]RGSRZLHGQLHJRHOHPHQWX N
1 Wywołanie funkcji. Czy jej wartością zwrotną jest true?
2 Wywołanie funkcji: showErrorMessage() i ustawienie odpowiedniej właściwości obiektu valid
USPRAWNIENIA I WERYFIKACJA FORMULARZY SIECIOWYCH
T 3
Wywołanie funkcji: removeErrorMessage()
WERYFIKACJA INFORMACJI O UŻYTKOWNIKU I HASŁA )XQNFMDvalidateBio() 1. :]PLHQQHMRQD]ZLHbio SU]HFKRZXMHHOHPHQWIRUPXODU]D]DZLHUDMÈF\LQIRUPDFMH RXĝ\WNRZQLNX
2. -HĝHOLZLHONRĂÊW\FK LQIRUPDFMLZ\QRVL]QDNöZ OXEPQLHMZDUWRĂFLÈ]PLHQQHM validMHVWtrueZSU]HFLZQ\P UD]LHZDUWRĂFLÈMHVWfalse 3. -HĝHOL]PLHQQDvalid ma ZDUWRĂÊLQQÈQLĝtrueWRĮ
c13/js/validation.js
JAVASCRIPT
1 2 3 4 5
function validateBio() { var bio = document.getElementById(’bio’); 3U]HFKRZ\ZDQLHRGQLHVLHQLDGRLQIRUPDFMLRXĝ\WNRZQLNX var valid = bio.value.length