3. F旦rra veckan
Vi tittade p奪 vad JavaScript 辰r och dess bakgrund
Vi tittade p奪 syntaxen i JavaScript
Vi l辰rde oss att arbeta med variabler, operationer och
fl旦deskontroll (if, switch, loopar)
Vi tittade p奪 funktioner
4. Spr奪ket Javascript
Ursprungligen avsett f旦r att g旦ra webbsidor roligare
Bra st旦d f旦r att manipulera DOM
Bra st旦d i de flesta webbl辰sare
K旦rs numera lite 旦ver allt
Har numera ett bra st旦d av tredjepartsbibliotek
8. Vad 辰r DOM?
HTML DOM (Document Object Model):
En representation av HTML-dokumentet som ett tr辰d
av element noder.
HTML-objektet kan ses som ett stort objekt
9. Vad 辰r DOM?
<!DOCTYPE html>
<html>
<head>
<title>The Batcave</title>
</head>
<body>
<p>
Hello <span>there</span> Batman!
<img src=/slideshow/javascript-och-dom/140006121/"batman_logo.png">
</p>
</body>
</html>
html
head body
title p
span img
The
Batcave
Hello Batman!
there
10. Kom 奪t element/noder
Det finns fyra s辰tt att komma 奪t element i DOM-tr辰det:
document.getElementById(id) ett element
document.getElementByTagName(tagName) en
samling av element
document.getElementByClassName(className) en
samling av element
document.querySelector(query) ett element
11. Hitta alla element av en specifik typ
var elements = document.getElementByTagName("p");
Hittar alla p-element och returnerar ett objekt av typen
HTMLCollection, som liknar ett array-objekt:
var el = elements[0]; // F旦rsta elementet i samlingen
var size = elements.length; // Antal element
12. ID kontra klass i HTML
Enskilda HTML-element (kan) identifieras med ett ID:
Ett ID best奪r av en str辰ng
ID:n 辰r unika och kan bara finnas en g奪ng per dokument
Refereras till som #mitt_id
Ett element kan tillh旦ra en klass:
Ett klassnamn best奪r av en str辰ng
Flera element kan tillh旦ra samma klass.
Refereras till som .min_klass
13. Exempel p奪 anv辰ndande av ID
<!DOCTYPE html>
<html>
<head>
<title>Sample Site</title>
</head>
<body>
<p>
Hello <span id="location">there</span> Batman!
<img src=/slideshow/javascript-och-dom/140006121/"batman_logo.png">
</p>
<button onclick="relocate()">Change text</button>
<script>
function relocate() {
document.getElementById("location").innerHTML = "here";
}
</script>
</body>
</html>
V奪rt ID
V奪rt ID
14. Exempel p奪 anv辰ndande av klass
<!DOCTYPE html>
<html>
<head>
<title>Sample Site</title>
<style>
li.real_deal {
color: red;
}
</style>
</head>
<body>
<h1>Batman's gadgets</h1>
<ul>
<li class="real_deal">Batarang</li>
<li class="real_deal">Batmobile</li>
<li class="bad_pun">Batteries</li>
</ul>
</body>
</html>
Den h辰r regeln
matchar de h辰r elementen
16. Query Selector
var element = document.querySelector(".someClass");
Returnerar den f旦rsta noden av klassen someClass.
Kan anv辰ndas med:
Taggnamn: document.querySelector("tag");
Klassnamn: document.querySelector(".someClass");
ID: document.querySelector("#someID");
17. Navigera i DOM
<!DOCTYPE html>
<html>
<head>
<title>The Batcave</title>
</head>
<body>
<p>
Hello <span>there</span> Batman!
<img src=/slideshow/javascript-och-dom/140006121/"batman_logo.png">
</p>
</body>
</html>
html
head body
title p
span img
The
Batcave
Hello Batman!
there
18. Navigera i DOM f旦r辰ldrar och barn
html
head body
title p
span img
The
Batcave
Hello Batman!
there
parentNode
firstChild lastChild
body.parentNode html
html.firstChild head
html.lastChild body
html.childNodes[1] body
19. Navigera i DOM syskon
html
head body
title p
span img
The
Batcave
Hello Batman!
there
nextSibling
previousSibling
head.nextSibling body
body.previousSibling head
20. Modifiera en nod
Vi beh旦ver k辰nna till tv奪 typer av egenskaper hos en nod:
InnerHTML
Den text som innesluts av ett HTML-element
Kan vara HTML-kod
Attribut
F旦r辰ndrar ett elements beteende. Exempel:
src
style
21. Vad 辰r vad?
...
<p>
Hello <span>there</span> Batman!
<img src=/slideshow/javascript-och-dom/140006121/"batman_logo.png">
</p>
...
p
span imgHello Batman!
there
src
span.innerHTML
Attribut: img.src
22. Arbeta med innerHTML
<!DOCTYPE html>
<html>
<head>
<title>Sample Site</title>
</head>
<body>
<h1>Welcome to the Batcave!</h1>
<p>
Alfred is <span id="status">out</span>.
</p>
<script>
var status = document.getElementById("status");
status.innerHTML = "in";
</script>
</body>
</html>
23. Arbeta med attribut
<!DOCTYPE html>
<html>
<head>
<title>Sample Site</title>
</head>
<body>
<h1>Welcome to Arkham Asylum!</h1>
<h2>Inmate of the month:</h2>
<img id="inmate" src=/slideshow/javascript-och-dom/140006121/"penguin.jpg">
<script>
var imnate = document.getElementById("inmate");
inmate.setAttribute("src", "joker.jpg");
</script>
</body>
</html>
24. Special: attribut-noder och CSS
Attributet style (inline CSS) 辰r en attribut-nod och hanteras
s奪 h辰r:
...
<body>
<h1>Welcome to Wayne Mansion!</h1>
<p>
Alfred is <span id="status" style="color: red">out</span>.
</p>
<script>
var status = document.getElementById("status");
status.innerHTML = "in";
status.style.color = "green";
</script>
</body>
...
25. L辰gg till nya element till tr辰det
Vi skapar nya element genom att anv辰nda oss av
document.createElement("tag_name")
Nya element beh旦ver ofta text. Det skapas s奪 h辰r:
document.createTextNode("My text")
Dessa sammanfogas sedan:
var p = document.createElement("p");
var textNode = document.createTextNode("Batman");
p.appendChild(textNode);
26. L辰gg in nya element till tr辰det
Vi har tv奪 s辰tt att l辰gga till nya element till tr辰det
element.appendChild(node)
l辰gg node sist bland barnen till element
element.insertBefore(node, child)
l辰gg till f旦re elementet child
30. Ta bort element fr奪n tr辰det
Vi har tv奪 s辰tt att ta bort element fr奪n DOM-tr辰det:
parent.removeChild(child)
tar bort ett element
parent.replaceChild(element1, element2)
ers辰tter ett element
31. Ta bort ett element
<!DOCTYPE html>
<html>
...
<body>
<h1>Batman's gadgets</h1>
<ul id="gadget_list">
<li id="batarang" class="real_deal">Batarang</li>
<li id="batmobile" class="real_deal">Batmobile</li>
<li id="batteries" class="bad_pun">Batteries</li>
</ul>
<script>
var parent = document.getElementById("gadget_list");
var child = document.getElementById("batmobile");
parent.removeChild(child);
</script>
</body>
</html>
32. Ta bort ett element
<!DOCTYPE html>
<html>
...
<body>
<h1>Batman's gadgets</h1>
<ul id="gadget_list">
<li id="batarang" class="real_deal">Batarang</li>
<li id="batmobile" class="real_deal">Batmobile</li>
<li id="batteries" class="bad_pun">Batteries</li>
</ul>
<script>
var child = document.getElementById("batmobile");
child.parentNode.removeChild(child);
</script>
</body>
</html>
33. Ers辰tt ett element
<!DOCTYPE html>
<html>
<body>
<h1>Batman's gadgets</h1>
<ul id="gadget_list">
<li id="batarang" class="real_deal">Batarang</li>
<li id="batmobile" class="real_deal">Batmobile</li>
<li id="batteries" class="bad_pun">Batteries</li>
</ul>
<script>
var batcave = document.createElement("li");
var label = document.createTextNode("Bat cave");
batcave.appendChild(label);
var parent = document.getElementById("gadget_list");
var batteries = document.getElementById("batteries");
parent.replaceChild(batcave, batteries);
</script>
</body>
</html>
34. Ers辰tt ett element
<!DOCTYPE html>
<html>
<body>
<h1>Batman's gadgets</h1>
<ul id="gadget_list">
<li id="batarang" class="real_deal">Batarang</li>
<li id="batmobile" class="real_deal">Batmobile</li>
<li id="batteries" class="bad_pun">Batteries</li>
</ul>
<script>
var batcave = document.createElement("li");
var label = document.createTextNode("Bat cave");
batcave.appendChild(label);
var batteries = document.getElementById("batteries");
batteries.parentNode.replaceChild(batcave, batteries);
</script>
</body>
</html>
36. Vad 辰r h辰ndelser?
En h辰ndelse 辰r ett meddelande som skickas till JavaScript-
motorn, och som sedan p奪verkar k旦rningen av programmet.
Exempel:
Anv辰ndaren klickar p奪 en knapp
Ett AJAX-anrop (dvs HTTP) slutf旦rs
En timeout tar slut
Ett formul辰r skickas
Vi kan lyssna efter dessa h辰ndelser och reagera p奪 dem!
37. Vanliga h辰ndelser i JavaScript/DOM
Blur n辰r ett objekt f旦rlorar fokus
Click n辰r anv辰ndaren klickar p奪 ett objekt
Focus n辰r ett objekt f奪r fokus
Load n辰r objektet 辰r f辰rdigladdat
Mouseover n辰r muspekaren sv辰var 旦ver objektet
Select n辰r ett val i en drop down-meny v辰ljs
Submit n辰r ett formul辰r skickas
38. Reagera p奪 h辰ndelser
K旦rning av JavaScript i webbl辰saren 辰r asynkron. JS-
motorn har en lista av kod som den kan k旦ra.
Motorn k旦r kod s奪 l辰nge den kan, en funktion i taget, och
delegerar allt h奪rt arbete till webbl辰saren.
N辰r webbl辰saren 辰r f辰rdig med ett uppdrag (eller f奪r en
input fr奪n anv辰ndaren) l辰ggs ett uppdrag i JavaScript-
motorns att g旦ra-lista.
39. Metoden .addEventListener()
element.addEventListener(event, function, useCapture);
Parametern event 辰r en str辰ng som anger vilken h辰ndelse vi vill
lyssna efter.
Parametern function 辰r en funktionspekare och ber辰ttar vilken
funktion som ska k旦ras n辰r h辰ndelsen intr辰ffar. Den kan vara
anonym.
Parametern useCapture ber辰ttar om vi vill anv辰nda event bubbling
eller event capturing. verkurs, och helt frivilligt att anv辰nda.
Ett element kan ha flera event listeners, 辰ven per h辰ndelse!
40. Exempel med addEventListener()
<!DOCTYPE html>
<html>
...
<body>
<h1>Welcome to the Wayne Mansion intercom system!</h1>
<span id="caller">Click to summon Alfred</span>
<script>
var caller = document.getElementById("caller");
caller.addEventListener("click", callAlfred);
function callAlfred() {
alert("You called, Master Wayne");
}
</script>
</body>
</html>