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

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

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

JavaScript. DOM Scripting

Webbprogrammering, DA123A, Studiematerial 4

E12 "Evil is going on"

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

E07 "Greased Lightning"

JAVASCRIPT. Beteende

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

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

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

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

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

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

Visa och dölja element med JavaScript

JS & beteende. TNMK30 - Elektronisk publicering

Objektbaserad programmering

En grundkurs i hemsidor och hur de är uppbyggda

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

E12 "Evil is going on"

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

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

Introduk+on +ll programmering i JavaScript

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

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

HTML. Introduktion till HyperText Markup Language

Nätet. Uppgiften. Nivå

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

Konstruktion av datorspråk

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

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

E13 "Behind the Wild"

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

I den här labben ska vi använda oss av en trevlig nyhet i HTML5: Local Storage, för att implementera en sorts lokal gästbok.

Kursplanering Utveckling av webbapplikationer

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

Labora&on 4 CSS och validering övningar/uppgi9er

JavaScript. JavaScript Ramverk (Bibliotek) jquery + jquery UI

En snabb titt på XML LEKTION 6

F15 Tillgänglighet/Accessibility Dagens agenda

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

ORDLISTA WEBBDESIGN 100P

Introducerande övningar i HTML

E07 "Greased Lightning"

Webbteknik för ingenjörer

Kravspecifika.on, pappersprototyp & CSS

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Inlämningsuppgift 2. DA156A - Introduktion till webbutveckling Teknik och samhälle, Malmö högskola Oktober 2012

F02 HTML. Föreläsning 2, HT2013 HTML. Kurser: Klientbaserad Webbutveckling 1DV435. Johan Leitet

Strukturering med XML och DTD

Del 1 och 2 HTML/CSS. Webbutveckling Laboration 1 Nicklas Bostedt

XSLT. Extensible Stylesheet Language Transformations

INTRODUKTION TILL ANGULAR JS

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

F13 HTML5 Dagens agenda

ITK:P2 F1. Hemsidor med HTML HTML. FTP, HTTP, HTML, XML och XHTML

Labbrapport: HTML och CSS

Kommunikation. Dator med webbläsare Förfrågan: Webserver. Returnerar HTML-kod

Jämförelse av funktionsbibliotek för JavaScript

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

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

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

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

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

03/12/2015. Logga in på: b.socrative.com eller ladda ner appen

Språk för webben introduk4on 4ll HTML

Laboration 2: Xhtml och CSS.

Övning (X)HTML 2. Sidan 1 av

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

Övningar i JavaScript del 5

Tillämpad fysik och elektronik Per Kvarnbrink m.fl. Laboration 2: HTML och CSS.

Struktur & Layout med CSS

Testautomatisering. HTML, Dev Tools, Watir

Lektion 4 HTML, CSS och PHP

Appar med ryggrad. Introduktion till JavaScriptramverket Backbone

CSS-övningar. 1. Grunder

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

MVC med Javascript och Ajax. Filip Ekberg

För att få respektive betyg krävs: 25 för godkänt, 37,5 för väl godkänt (obs betyget gäller tentan, inte kursen som helhet)

F07 Stilmallar Dagens agenda

Tentamen TEN1 HI

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

Labora&on 8 Formulär övningar/uppgi6er

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

Exemple på Tentauppgifter Webbprogrammering

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

E09 - Totally Tool Time

Laborationsanvisning. HTML5 Laboration 6. Författare: Johan Leitet Version: 1 Datum:

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

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

"HTML5 och relaterade API:er"

Labora&on 6 CSS och responsiv webbdesign övningar/uppgi:er

Webbprogrammering. Sahand Sadjadee

JavaScript. En Introduktion

<script src= "

EDAF90 - Webprogrammering HTML och CSS

Webbutveckling Laboration 1: HTML5 och CSS3.

Lektion 3 HTML, CSS och JavaScript

Animering på webben En jämnförande studie av CSS och jquery i deras gemensamma funktionsområde för animering

Transkript:

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

E06 Why We Fight Dagens agenda Våra lager JavaScript engines DOM och BOM DOM-strukturen Nodtyper Navigering i noder document Jobba med attribut Skapa element Textnoder innerhtml

Hur ni kommer att jobba i vår Uppförande (Behavior) JavaScript Presenta?on (CSS) Struktur (HTML) Användargränsni=slager (Ex. ASP.NET.aspx) Affärslager (BLL) (Ex. C#- klasser) Dataåtkomstlager (DAL) (Ex. C#- klasser) Datalager (Ex. MSSQL)

JavaScript engine Chakra (IE9) JScript (Trident <IE9) Nitro (S5) SquirrelFish (S4) JavaScriptCore SpiderMonkey V8 V8 Carakan (10.5) Futhark (9.5) Linear B (7.0) Linear A (4.0)

DOM och BOM DOM Document Object Model BOM Browser Object Model

DOM DOM är en standardiserad "modell" av ett HTMLdokuments samtliga delar: Bilder, formulär, tabeller, tabellrader, tabellceller o.s.v. DOM hanterar innehållet på en webbsida, inte något som rör webbläsaren, det är BOM:ens ansvar. Vi kommer att fokusera på DOM level 1. (Level 2 och 3 finns också)

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>

12 nodetyper 1. ELEMENT_NODE 2. ATTRIBUTE_NODE 3. TEXT_NODE 4. CDATA_SECTION_NODE 5. ENTITY_REFERENCE_NODE 6. ENTITY_NODE 7. PROCESSONG_INSTRUCTION_NODE 8. DOCUMENT_NODE 9. DOCUMENT_TYPE_NODE 10. CDATA_FRAGMENT_NODE 11. NOTATION_NODE if(mindomnode.nodetype === 1) { console.log("ett element"); } else if(mindomnode.nodetype === 3){ } console.log("du hittade text");

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 Fll 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

NodeList!= Array hwps://developer.mozilla.org/en- US/docs/Web/API/NodeList

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

document document <!doctype html> <html> <head>...</head> <body>... </body> </html> DocumentType HTML HEAD BODY

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

Attribut <div id="airborne" eget_attribut="test" class="ab"> var node = document.getelementbyid("airborne"); alert(node.id); // Airborne alert(node.eget_attribut);// undefined alert(node.class); // undefined alert(node.classname); // ab I IE: "test" 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" eget_attribut="test" class="ab"> var node = document.getelementbyid("airborne"); alert(node.getattribute("id")); // Airborne alert(node.getattribute("eget_attribut")); // test alert(node.getattribute("class")); // ab setawribute fungerar inte i IE (7 eller Fdigare) för "class" eller "style". removeawribute är ej implementerat i IE6 eller Fdigare.

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 Fll newnode sist i node.childnodes Lägger Fll newnode innan beforenode i node.childnodes ErsäWer oldnode med newnode i node.childnodes Tar bort oldnode från node.childnodes Klonar node, true gör aw 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 EW 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 Fll text Fll 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

Textnoder <html> <head> <title>incident report</title> </head> <body> #text <h1>incident report</h1> #text <p> #text <a href="#">last report</a> </p> #text <p><img src="photo" alt="" /></p> </body> </html> #text #text alert(document.body.childnodes.length); <= 8 >= 9

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;

innerhtml eller createelement? innerhtml generellt mer effektiv om den används rätt: for(var i=0; i < values.length; i++){ ul.innerhtml += "<li>"+values[i]+"</li>"; } Ineffektivt, en HTML-parser måste skapas två gånger per iteraton (+=). var htmlstr = ""; for(var i=0; i < values.length; i++){ htmlstr += "<li>"+values[i]+"</li>"; } ul.innerhtml = htmlstr; Effektivt, parsern skapas bara en gång. När vi härnäst tittar på event kommer vi att se fördelar med att använda createelement

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

Douglas crockford doesn't wait for ondomready, the DOM waits for him... Källa: http://twitter.com/crockfordfacts