F07 DOM/BOM. Föreläsning 7, HT2013 Document Object Model Browser Object Model. Johan Leitet. Kurs: 1DV435 Klientbaserad Webbutveckling

Relevanta dokument
E06 "Why We Fight" Föreläsning 6, HT2014 Document Object Model. Johan Leitet. Kurs: 1dv403 Webbteknik I

E07 "Greased Lightning"

E07 "Greased Lightning"

E09 - Totally Tool Time

JavaScript. DOM Scripting

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

JAVASCRIPT. Beteende

E11 "Protection" Föreläsning 11, HT2014 Säkerhet, tillgänglighet. Johan Leitet. Kurs: 1dv403 Webbteknik I

Föreläsning 4. CSS Stilmallar för webben

Webbprogrammering, DA123A, Studiematerial 4

! HTML Formulär! JavaScript! Syntax! Events! DOM. ! URL variabler i en query string (get) ! HTTP post request (post)

JS & beteende. TNMK30 - Elektronisk publicering

ORDLISTA WEBBDESIGN 100P

E12 "Evil is going on"

Objektbaserad programmering

JavaScript del 9 Dynamik och animeringar

Övning 1 Vi börjar med en vanlig html-fil där html används för både innehåll och utseende:

E13 "Behind the Wild"

Att styla webbsidor. Nivå. Uppgiften

JavaScript. JavaScript Ramverk (Bibliotek) jquery + jquery UI

Labora&on 5 CSS och layout samt fråga E övningar/uppgi>er

TDDD52 CSS. Färger. Färger 1/3/13

CSS-övningar. 1. Grunder

Nätet. Uppgiften. Nivå

E13 Behind the Wild. Dagens agenda. Cookies Context/ändra context Augmentation (förstärkning) Klassiskt arv Att låna metoder Namespaces Postludium

Laboration 6 Formulär och stränghantering övningar/uppgifter

Det ska endast finnas två bilder av samma typ på spelplanen.

Labora&on 2 Funk&oner, if och loop övningar/uppgi:er

HTML5 Semantic. Informationen kommer från w3schools.com. En semantisk elementet beskriver tydligt dess betydelse för både webbläsaren och utvecklaren.

F07 Stilmallar Dagens agenda

Lektion 2 Del 1 Kapitel 6

EDA095 HTML. Per Andersson. April 26, Lund University Innehåll: HTML, CSS, DOM, JavaScript

Visa och dölja element med JavaScript

Introduk+on +ll programmering i JavaScript

Formulär, textsträngar och en del annat

Inför prov 1 i webbdesign

HTML och CSS. Eric Elfving Institutionen för Datavetenskap (IDA)

jquery Grundkurs 1 Copyright Mahmud Al Hakim

Programmeringteknik. Planering MÅL LABB: MOMENT LAB4 HTML - EXEMPEL HTML. Webbdelen

Exemple på Tentauppgifter Webbprogrammering

Lektion 3 HTML, CSS och JavaScript

12/9/2010 REGLER WEBBPRODUKTION WEBBDESIGN CASCADING STYLE SHEETS CSS LOKALA STILMALLAR GLOBALA STILMALLAR. Selektor. Deklaration

En grundkurs i hemsidor och hur de är uppbyggda

Övning (X)HTML 2. Sidan 1 av

Uppmärkningsspråk. TDP007 Konstruktion av datorspråk Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

21/01/2016. Stilmallar. styra utseendet av webbplatsen DEL 1. Karin Fahlquist. index.html. recept.html frukt.html grönsaker.html

Lektion 2 - CSS. CSS - Fortsätt så här

Repetition. Hypertext. Internet HTTP. Server och klient Text försedd med länkar till andra texter. Många sammankopplade nät

Repetition. Hypertext. Internet HTTP. Server och klient Föreläsning 2. Text försedd med länkar till andra texter. Många sammankopplade nät

DOM (Document Object Model) är modellen efter vilken en webbläsaren är uppbyggd. Alla objekt/element i webbläsaren finns hierarkiskt ordnade i DOM.

JavaScript. En Introduktion

Förkunskaper: Tim Berners Lees vision webbläsarkriget W3C strukturtagg <h1> layout-tagg <font size="6">

Innehåll. JavaScript - Grundkurs. Vad är JavaScript? Vad är JavaScript? Vad behövs? Lite historia

Karlstads Universitet, Datavetenskap 1

EDA095 JavaScript. Per Andersson. Maj 4, Lund University Per Andersson EDA095 JavaScript Maj 4, / 23

Labora&on 3 HTML och struktur övningar/uppgi:er

Innehåll Introduktion... 3 InteractiveScene.config... 3 Scener <scenes>... 3 Typsnitt <fonts>... 3 Övergångar <transitions>...

HTML och CSS. Eric Elfving Institutionen för datavetenskap. 18 augusti 2015

L04.1 Marodören. Inledning. Mål. Genomförande. Uppgift 1 Hello World. Moment I

Att bygga enkla webbsidor

Appar med ryggrad. Introduktion till JavaScriptramverket Backbone

En introduktion till Dynamisk HTML (DHTML)

<header> </header> <footer> </footer>

WEBDESIGN A - DTR 1210

E03 "Day 3: 2:00 p.m 3:00 p.m"

Webbens grundbegrepp. Introduktion till programmering. Ytterligare exempel. Exempel på webbsida. Föreläsning 5

Webbteknik. Innehåll. Historisk återblick Teknisk beskrivning Märkspråk Standardisering Trender. En kort introduktion

Kursplanering Utveckling av webbapplikationer

/*formatering för html och body elementen - elementens höjd sträcker sig över hela webbläsarfönstrets höjd*/ html, body { height: 100%; }

LUVIT LMS Quick Guide LUVIT Composer

Labora&on 8 Formulär övningar/uppgi6er

Övningar i JavaScript del 5

En snabb titt på XML LEKTION 6

Labora&on 1 Variabler och beräkningar övningar/uppgi9er

Introduktion HTML och PHP 732G16 Databaser design och programmering

INTRODUKTION TILL ANGULAR JS

WEBDESIGN A - DTR 1210

För att skriva CSS-kod använder man sig av olika kommandon. Ett exempel på hur man kan skriva kod för att ändra textfärg kan vara:

Struktur & Layout med CSS

Räkna med ASP.NET Web Forms

Materialspecifikationer

Internet och WWW Laboration 3 VT10 Högskolan Dalarna Hans Rosendahl. Laboration 3 CSS del 2. 1 av 20

EDAF90 - Webprogrammering HTML och CSS

F13 HTML5 Dagens agenda

Labora&on 2 HTML och validering övningar/uppgi:er

E12 "Evil is going on"

<Webbutvecklare lektion="02"> Kursledare: Mahmud Al Hakim

Sidan kommer inte läggas upp någonstans utan du redovisar den för mig på något handledningstillfälle.

Lektion 5, del 1, kapitel 12

Labora&on 4 CSS och validering samt fråga D övningar/uppgi?er

Frågor och svar - Diagnostisk prov ht14 - Webbutveckling 1

Kravspecifika.on, pappersprototyp & CSS

Laboration 3 HTML och struktur samt frågorna A - C övningar/uppgifter

En stiligare portal Laboration 3

Kopiering av objekt i Java

Arbetsmaterial HTML pass 1 - Grunder

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Testautomatisering. HTML, Dev Tools, Watir

Konstruktion av datorspråk

CSS. TNMK30 - Elektronisk publicering

Transkript:

Föreläsning 7, HT2013 Document Object Model Browser Object Model F07 DOM/BOM Kurs: 1DV435 Klientbaserad Webbutveckling Johan Leitet

E07 DOM/BOM Dagens agenda DOM och BOM DOM-strukturen Navigering i noder document Jobba med attribut Skapa element Textnoder innerhtml Event Timers

DOM och BOM DOM Document Object Model BOM Browser Object Model

DOM-strukturen DOM delar in sidans delar i en trädstruktur. Varje del i trädet kallas nod. Noderna har familjerelationer till varandra, siblings, child, parents. <html> <head> <title>incident report</title> </head> <body> <h1>incident report</h1> <p><a href="#">last report</a></p> <p><img src="photo" alt="" /></p> </body> </html>

Välja ut element För att komma åt en eller flera noder i trädet kan vi t.ex. använda dessa metoder: document.getelementbyid( idvalue ) document.getelementsbytagname(tagname) node.getelementsbytagname(tagname) document.getelementsbyclassname(classname) node.getelementsbyclassname(classname) Returnerar en referens +ll den nod i trädet som har det angivna ID:t. Returnerar en nodlista med noder (0 eller flera) med det angivna tagg- namnet. Listan fungerar ungefär som en array. Likt ovan men observera, Internet Explorer 9+ (HTML5- utökning av DOM lvl1) Vi får refrenser till noderna direkt i DOMen. Vi får alltså inte en kopia av noderna.

<html> <head> <title>flash / Thunder</title> </head> <body> <div class="topmenu"> <ul id="mainnav"> <li><a href="#">vat69</a></li> <li><a href="#">coffey</a></li> </ul> </div> var node1 = document.getelementbyid("mainnav"); console.log(node1.nodename); // UL console.log(node1.nodetype); // 1 var node2 = document.getelementsbytagname("li"); console.log(node2.length); // 2 console.log(node2[0].nodename); // LI

Selectors API I nyare webbläsare kan vi hämta ut noder med CSSselektorer: document.queryselector( selector ) node.queryselector( selector ) document.queryselectorall( selector ) node.queryselectorall( selector ) Returnerar första nod som stämmer mot selektorn. Kastar undantag vid syntaxfel eller okänd selektor. Internet Explorer 8+ Returnerar alla noder som stämmer mot selektorn. Kastar undantag vid syntaxfel eller okänd selektor. Internet Explorer 8+ var articles = document.queryselectorall("#content.article"); console.log(articles.length); Zakas: Kap. 11

Nodträdet Node Node Node Node childnodes nextsibling previoussibling parentnode nextsibling previoussibling nodename nodetype nodevalue Namn på en nod EM nummer som visar typ av nod Ger texten på textnoder

HTML-element IMG nodename "IMG", "P", "BR" etc... nodetype 1 nodevalue null parentnode Document eller Element id nodeegenskapen id +tle nodeegenskapen +tle lang nodeegenskapen lang dir nodeegenskapen dir classname nodeegenskapen class A BR BUTTON DIV FORM H1, H2...H6 HEAD LI P...

Attribut <div id="airborne" class="ab"> var node = document.queryselector("#airborne"); console.log(node.id); console.log(node.class); console.log(node.classname); // Airborne // undefined // ab Vi kommer enbart åt attribut som är definierade i HTML via.attributnamn. Vi måste dessutom se upp med vissa attributnamn.

Attribut W3C har ett standardiserat sätt att jobba med attribut: <div id="airborne" class="ab"> var node = document.getelementbyid("airborne"); alert(node.getattribute("id")); // Airborne alert(node.getattribute("class")); // ab

Attribut getattribute("attributnamn"); setattribute("attributnamn", "värde"); removeattribute("attributnamn");

Skapa element Skapar nya noder gör vi med document.createelement("nodenamn") var div = document.createelement("div"); div.id = "Malarkey"; div.classname = "redhair"; Koden ovans skapar bara elementet. Det är fortfarande utanför vårt dokument. DIV#Malarkey

Lägga till noder node.appendchild(newnode) node.insertbefore(newnode, beforenode) node.replacechild(newnode, oldnode) node.removechild(oldnode) node.clonenode(bool) Lägga till sist i body: document.body.appendchild(div); Lägger +ll newnode sist i node.childnodes Lägger +ll newnode innan beforenode i node.childnodes ErsäMer oldnode med newnode i node.childnodes Tar bort oldnode från node.childnodes Klonar node, true gör am samtliga undernoder också klonas. DIV#Malarkey Lägga till först i body: document.body.insertbefore(div, document.body.firstchild);

Textnoder nodename #text nodetype 3 nodevalue texten i noden parentnode EM Element <div id="ron"></div> // ej #text <div id="ross"> </div> // #text <div id="bull">hello</div> // #text childnodes appenddata(text) finns ej Lägger +ll text +ll slutet var div = document.getelementbyid("bull"); div.firstchild.nodevalue = "Hello Again"; // "Hello Again" // Ger: "<strong>hello Again&lt/strong>" div.firstchild.nodevalue = "<strong>hello Again</strong>";

Skapa textnoder Skapar nya textnoder gör vi med document.createtextnode("text") var div = document.createelement("div"); var text = document.createtextnode("hello Again"); div.appendchild(text); DIV #text

Utökning: innerhtml innerhtml skapades av Microsoft och gör det enklare att lägga till element i DOM-strukturen var div = document.getelementbyid("bull"); div.innerhtml = "<p>ersätter hela innehållet i #Bull</p>"; div.innerhtml += "<p>lägger till ett nytt stycke sist.</p>"; div.innerhtml = "<p>lägger till ett nytt stycke först.</p>"+div.innerhtml; Observera skillnaden mot node.nodevalue som enbart kan lägga till text.

Observera att skillnaden mellan: innerhtml node.innerhtml = "<p>"; node.innerhtml += "Flash Thunder"; node.innerhtml += "</p>"; <p></p>flash Thunder Och: var tmpstr = "<p>"; tmpstr += "Flash Thunder"; tmpstr += "</p>"; <p>flash Thunder</p> node.innerhtml = tmpstr;

Ändra CSS-egenskaper Vi kommer åt stilegenskaper genom egenskapen style på våra noder: var node = document.queryselector("#discovery"); node.style.color = "#AA5698"; Eftersom bindestreck inte är ett giltigt tecken på en egenskap gör man följande: font- size margin- lez...... Float fontsize marginlez cssfloat Tyvärr är det problem att använda style tillsammans med setattribute i IE <= 7. Annars kan vi skriva: node.setattribute("style", "font-size:12px; color:red;");

Inline styles Om vi sätter stilattribut med ex. style.color kommer HTML-outputen att ändras till: <a href="buster.html" id="discovery" style="color:red; ">

Undvik uppblandning av lager Om vi ändrar CSS-koden i JavaScript så innebär detta att utseendet på sidan blir svåruppdaterat eftersom Uppförandelagret innehåller Presentationslagerkod. Utnyttja css-klasser! var node = document.getelementbyid("discovery"); node.classname = "jschanged";.js /* Dynamicly assigned classes (via JavaScript) */.jschanged { color: red; } background-color: #12AC8B;.css node.setattribute("class", "jschanged");

HTML5 classlist var node = document.getelementbyid("discovery"); node.classlist.add("jschanged"); node.classlist.add( värde ) node.classlist.remove( värde ) node.classlist.toggle( värde ) node.classlist.contains( värde ) Lägg +ll en klass Ta bort Om inte sam: säm, annars ta bort Är klassen är sam? (bool) IE 10+ Android 3.0+ FF 3.6+ ios 5+ Chrome 8+ Safari 5.1+ Opera 11.5+

Händelsestyrd programmering

Händelser Mushändelser click, dblclick, mousedown, mouseout, mouseover, mouseup, mousemove Tangentbordshändelser keydown, keypress, keyup HTML-händelser load, unload, abort, error, select, change, submit, reset, resize, scroll, focus, blur Användargränsnittshändelser DOMFocusIn, DOMFocusOut, DOMActivate Mutationshändelser DOMSubtreeModified, DOMNodeInserted, DOMNodeRemoved, DOMNodeInsertedIntoDocument, DOMNodeRemovedFromDocument, DOMAttrModified, DOMCharacterDataModified, DOMContentLoaded

Händelsehanterare En händelsehanterare (event handler, event listener) är den som anropas då en händelse (event) inträffar. on load on focus on click on keydown on blur

Koppla händelsehanterare Man kan göra så här: <a href="buster.html" onclick="jumpfrombuilding();"> Men det är inte rätt... 1) Vi vill undvika att blanda javascriptkod med HTML-kod 2) Varje gång koden ska köras behöver en javascripttolk dras igång för att tolka koden.

Koppla händelsehanterare Snyggare är att koppla ihop detta i JS-koden: <a href="buster.html" id="crasher">.html var link = document.getelementbyid("crasher"); link.onclick = jumpfrombuilding;.js function jumpfrombuilding(){ alert("jumping!"); } link.onclick = function(){ alert( Jumping! ); };.js Ovanstående modell har några nackdelar, bland annat kan vi inte koppla flera lyssnare till samma event. W3C har därför ett nyare sätt, via addeventlistener.

Vad triggade eventet? Det finns ett enkelt sätt att få reda på vad som triggade eventet (utlöste händelsen): var link = document.queryselector("#crasher"); link.onclick = jumpfrombuilding; function jumpfrombuilding(e){ } alert(e.target === link); // true e.target refererar till det objekt som "äger" funktionen, triggar eventet

Hindra defulthändelsen När du klickar på en länk kommer först onclick att köras och efter det kommer länken att aktiveras och gå till den sida som är angiven i href. Detta går att hindra <a href="buster.html" id="crasher"> var link = document.getelementbyid("crasher"); link.onclick = function(e){ } e.preventdefault(); dosomestuffhere();

hmp://jsfiddle.net/leitet/yfg4t/1/ Demo

DOM och BOM DOM Document Object Model BOM Browser Object Model

BOM BOM (Browser Object Model) är gränssnittet mellan JavaScript och webbläsaren. BOM är inte standardiserat. Objektet window är centralt.

BOM hanterar Insorterat under denna rubrik hittar vi: Timers och intervall Webbläsarfönster (och ramar, frames) - Positioner - Storlekar Systemdialoger (alert, prompt, confirm) Location (adressfält) Historik...

window window-objektet representerar en instans av webbläsarfönstret och motsvarar i webbläsaren det objekt som är Global i ECMAScript. window document Alla globala variabler hamnar således på just window-objektet var todo = "Go to work, not!"; alert(todo); // Go to work, not! alert(window.todo); // Go to work, not!

Timers Två typer av timers i webbläsaren: Timeout Intervall

settimeout settimeout kan vi använda när vi vill vänta och sedan utföra något. settimeout(myapp.gotoschool, 3000); settimeout(function(){ gotoschool(); ms }, 3000); settimeout("gotoschool()", 3000); settimeout ligger på window-objektet men eftersom detta är globalt behöver vi inte skriva window.settimeout, men vi kan.

setinterval settimeout kan vi använda när vi vill vänta och sedan utföra något. setinterval(writeonblackboard, 3000); ms setinterval(function(){ writeonblackboard("i will not use inline JS in my HTML-pages."); }, 3000); När väl ett intervall startat så slutar det inte förrän man säger till det att stoppa. (Vilket kan innebära vissa problem, så kan man bör man undvika setinterval och förlita sig på settimeout.)

clearinterval Genom att spara undan ett id som returneras från setinterval så kan vi stoppa timern när vi önskar. var timerid = setinterval(function(){ writeonblackboard("i will not use inline JS in my HTML-pages."); if(isblackboardfilled()){ } }, 3000); clearinterval(timerid); På samma sätt fungerar metoden cleartimeout

Till sist... Vilken fågel är bäst på JavaScript? Källa: hört på twitter