SlideShare a Scribd company logo
JavaScript
  DOM Manipulations and Events

  Slides By: Ynon Perek

  Fine me at: http://ynonperek.com


Friday, April 12, 13
The Task
    Read text                                                                   Make web
   <BODY BGCOLOR='#FFFFFF' style="overflow:hidden;"
   LEFTMARGIN=0 MARGINWIDTH=0 TOPMARGIN=0
   MARGINHEIGHT=0 CLASS="text" onload="DisplayAD();"
   onresize="if(typeof DZresize == 'function'){DZresize();};if(typeof
   dcOnResize == 'function'){dcOnResize();};if(typeof
   disYnetAdColOnResize == 'function'){disYnetAdColOnResize();};"
   lang=he><div id='divRedAlert' style='display:none;'></div><iframe
   id=frmRedAlert name=frmRedAlert frameborder=0 width=0 height=0
   MARGINHEIGHT=0 MARGINWIDTH=0 src='/Ext/App/RedAlert/
   CdaRedAlert_iframe/0,12639,84-234-208-20,00.html'></iframe><div
   id='ads.ozen' style='position:absolute;z-index:2;left:0;top:0;'></div><div
   id='ads.elvisR.1' style='position:absolute;z-index:2;right:0;top:0;'></
   div><div id=mainCont style="overflow:hidden; width:100%; height:100%;"
   align=center ><div id='mainSpacer' style='overflow:auto;height:
   100%'><script>
   <style>A.brightgrey:link{color:#7d7f7e}
   A.brightgrey:visited{color:#7d7f7e}A.brightgrey:active{color:#7d7f7e}
   A.brightgrey:hover{color:#f00}A.upnvl{color:#7d7f80}
   A.upnvl:visited{color:#7d7f80}A.upnvl:hover{color:#f00}
   A.btnvl{color:#7f90b0}A.btnvl:visited{color:#7f90b0}
   A.btnvl:hover{color:#f00}</style><table id=tbl_logos cellspacing=0 cetd
   width='46' align='left' style='line-height:12px;'><a href='http://
   www.ynetnews.com/home/0,7340,L-3083,00.html' class='text11
   btnvl'>English</a></td></tr></table></div></td><td width=11>&nbsp;</
   td><td width=2 bgcolor=black></td><td width=11>&nbsp;</td><td
   width=132 valign=top style='direction: rtl;' class='ghci3' ><div
   id=divMainLogo style='margin-top:1px;'></div></td><td width=11><div
   style='width:11px;'></div></td><TD WIDTH=194 align=right dir=rtl
   VALIGN=top class='ghciTopStoryMain1' ><div dir=ltr style='height:
   38px;overflow:hidden;'><IMG SRC='/Common/Files/Images/Date/12.gif'
   alt="12/04/2013 11:20"><IMG SRC='/Common/Files/Images/D...




Friday, April 12, 13
How Browsers Render


                       • Each browser has a Rendering Engine
                       • Rendering Engine takes an HTML text
                         and produces a DOM tree




Friday, April 12, 13
Rendering Engines
     Engine                Browser           Developer


     Blink                 Google Chrome     Google


     Gecko                 Mozilla Firefox   Mozilla


     Trident               IE                Microsoft

                                             Apple, KDE, Nokia,
     Webkit                Apple Safari
                                             Others



Friday, April 12, 13
How Browsers Work
                        Parse HTML to make DOM Tree


                         Build Render Tree from CSS


                              Layout Elements


                                   Paint

Friday, April 12, 13
What’s a DOM Tree

    <html>
    <body>
      <p>
                       Hello World
      </p>
      <div>
       <img src="example.png"/>
      </div>
    </body>
    </html>




Friday, April 12, 13
Rendering DOM Tree




Friday, April 12, 13
Rendering DOM Tree


                       • A Render tree is derived from DOM
                         tree
                       • It’s not a 1-1 relation




Friday, April 12, 13
Browser Flow

                       • Read page as text
                       • Create DOM tree
                       • Create Render tree
                       • Paint



Friday, April 12, 13
Enter JavaScript

                       • Read page as text
                       • Create DOM tree        JavaScript
                                              Manipulates the
                       • Create Render tree
                                                   data
                       • Paint



Friday, April 12, 13
Enter JavaScript

                       • JavaScript alters page load

                       • JavaScript alters DOM Tree
                       • JavaScript creates interactivity through
                         events handling




Friday, April 12, 13
JavaScript and DOM
   <!DOCTYPE html>
   <html>
   <head>
     <title></title>
   </head>
   <body>                  A <script> element is
     <script>
       var x = 5;          executed in place
       var y = 3;
       console.log('Hello From JS');
     </script>
     <p>This is just some text</p>
   </body>
   </html>




Friday, April 12, 13
Q&A
         Browser Page Rendering




Friday, April 12, 13
Interactive Apps


                       • Browser is a programming platform
                       • A web application is interactive




Friday, April 12, 13
Interactivity


                       • Browser itself is interactive
                       • In addition: A web page is interactive
                       • Demo




Friday, April 12, 13
Browser Events Loop

                                  Event Queue

                                                click




Friday, April 12, 13
Event Loop

                        Wait for Events




                        Handle Events



Friday, April 12, 13
Event Loop

                        Wait for Events




                        Handle Events



Friday, April 12, 13
Event Loop

                        Wait for Events




                        Handle Events



Friday, April 12, 13
Event Handling

                       DOM Node

                          +           Event Handler (code)

                         Event



Friday, April 12, 13
Code Outline


                       • From HTML:
                        • <a on...=”handleEvent()”>




Friday, April 12, 13
Code Outline
                       • But this can get messy
                         <a href="#" onclick="doclick"
                             onblur="doblur"
                             onchange="dochange"
                             ondblclick="dodblclick"
                             onmousemove="domove"
                             onmouseover="doover">
                         Too many events</a>



Friday, April 12, 13
Code Outline


                       • From JS
                        • Get a DOM node
                        • Bind event to code




Friday, April 12, 13
Getting DOM Nodes


                       • getElementById(...)
                       • getElementsByTagName(...)
                       • querySelector(...) - IE8 and up




Friday, April 12, 13
Browser Events

                       • All browsers use:
                         node.onevent = ...
                       • IE uses:
                         node.attachEvent(...)
                       • Other browsers use
                         node.addEventListener(...)


Friday, April 12, 13
Demo: Events


                       • Write a simple page that shows alert as
                         a response to click event
                       • Modify to change text of element




Friday, April 12, 13
Using the Event Object
                       • Event object includes info on the event
                       • Print it to console for inspection

                <button>Click Me</button>
           
                <script>
                  var btn = document.getElementsByTagName('button')[0];
                  btn.onclick = function(e) {
                    if ( ! e ) e = window.event;
           
                    console.dir( e );
                  };
                </script>


Friday, April 12, 13
Capturing vs. Bubbling

                      | |                                   / 
       ---------------| |-----------------   ---------------| |-----------------
       | element1     | |                |   | element1     | |                |
       |   -----------| |-----------     |   |   -----------| |-----------     |
       |   |element2  /           |     |   |   |element2 | |           |     |
       |   -------------------------     |   |   -------------------------     |
       |        Event CAPTURING          |   |        Event BUBBLING           |
       -----------------------------------   -----------------------------------




Friday, April 12, 13
Capturing vs. Bubbling

                      | |                                   / 
       ---------------| |-----------------   ---------------| |-----------------
       | element1     | |                |   | element1     | |                |
       |   -----------| |-----------     |   |   -----------| |-----------     |
       |   |element2  /           |     |   |   |element2 | |           |     |
       |   -------------------------     |   |   -------------------------     |
       |        Event CAPTURING          |   |        Event BUBBLING           |
       -----------------------------------   -----------------------------------


         Netscape                             Microsoft




Friday, April 12, 13
Capturing vs. Bubbling

                                        | | / 
                       -----------------| |--| |-----------------
                       | element1       | | | |                 |
                       |   -------------| |--| |-----------     |
                       |   |element2     / | |           |     |
                       |   --------------------------------     |
                       |        W3C event model                 |
                       ------------------------------------------




Friday, April 12, 13
Capturing vs. Bubbling

                       • node.addEventListener takes a third
                         parameter
                       • true means capturing
                       • false means bubbling
                       • defaults to false



Friday, April 12, 13
Demo


                       • Capture all click events using
                         document.onclick = ...




Friday, April 12, 13
Usages


                       • Default event handlers
                       • Dynamic event handlers




Friday, April 12, 13
Double Handlers

                                  element1.onclick =
                       Element2   doSomething;
                       Element1   element2.onclick =
                                  doSomething;




Friday, April 12, 13
Double Handlers
                                  function   doSomething(e) {
                                        if   ( ! e ) e = window.event;
                       Element2    
                                        //   this refers to
                       Element1         //   the current element

                                        // for inner event:
                                        // this = element2

                                        // for outer event:
                                        // this = element1
                                  }




Friday, April 12, 13
Event Types
             Interface Events            Mouse Events       Form Events



                  load, unload            click, dblclick     submit


                                      mousedown, mouseup,
                  resize, scroll,                              reset
                                          mousemove


                       focus, blur    mouseover, mouseout


Friday, April 12, 13
Default Action

                       • Some events also have a “default”
                         action
                       • For example: A link will take you to
                         another page by default




Friday, April 12, 13
Default Action


                       • Possible to prevent
                       • return false from handler
                       • Demo




Friday, April 12, 13
Q&A
         Handling Events




Friday, April 12, 13
Events Lab

                       • Implement 5 duplicated input boxes
                       • Each input box should have the same
                         text
                       • Change one -> all change automatically




Friday, April 12, 13
Events Lab




Friday, April 12, 13
Altering Page Load


                       • Change Document
                       • Change DOM Tree
                       • Change Render Tree




Friday, April 12, 13
Change Document


                       • (Don’t) use document.write to change
                         the document as it’s being loaded
                       • Considered bad practice




Friday, April 12, 13
Change Document
    <!DOCTYPE html>
    <html>
    <head>
      <title></title>
    </head>
    <body>
      <script>
        document.write('<h1>Hello World</h1>');
      </script>
      <p>This is just some text</p>
    </body>
    </html>




Friday, April 12, 13
Change Document
      1. Browser starts to
      create DOM tree

                                 body


                                2. Finds a script tag.
                       script   Stops to execute


Friday, April 12, 13
Change Document

                                body


                                       3. script added <h1>
                       script    h1    element to document




Friday, April 12, 13
Change Document

                                body



                       script     h1      p


                4. browser can continue
                to create the <p>

Friday, April 12, 13
Avoiding document.write


                       • Can insert invalid content
                       • Clobbers DOM if called after reading
                         the document




Friday, April 12, 13
Friendlier Ways


                       • Get a DOM node
                       • Change it using DOM API




Friday, April 12, 13
Finding
         DOM
         Nodes


Friday, April 12, 13
DOM Traversal
  <body>                                    body
    <div>
      <h1>Header</h1>
      <p>
        <img src="..." />       #text       #div       #text
        Paragraph text
        <a
  href="#">google</a>       #text   #text    #h1   #text       #p
      </p>
    </div>
  </body>




Friday, April 12, 13
DOM Traversal
                       • n.childNodes[]
                       • n.firstChild
                       • n.lastChild
                       • n.nextSibling
                       • n.parentNode
                       • n.previousSibling


Friday, April 12, 13
The (Past) Future


                       • document.querySelector takes any CSS
                         selector and fetches DOM element
                       • Supported in IE8 and later




Friday, April 12, 13
DOM API

                       • Allows
                        • Getting info on elements
                        • Changing element attributes
                        • Creating new elements
                        • Setting elements style


Friday, April 12, 13
DOM API
                       • Use x.nodeName to get the tag name

                       if ( this.nodeName === 'INPUT' ){
                         // handle input element
                       }




Friday, April 12, 13
DOM API

                       • Use x.nodeValue to get/set the node
                         value

              a.firstChild.nodeValue = 'Go to google';




Friday, April 12, 13
DOM API
                       • Use getAttribute / setAttribute to
                         change element attributes


           a.setAttribute('href',
                          'http://www.google.com');




Friday, April 12, 13
Creating New Elements
                       • Create elements and text nodes using
                         document
                       • Later you can add them to the DOM

                        document.createElement('P');

                        document.createTextNode('Hello
                        World');



Friday, April 12, 13
Creating New Elements
                       • Insert new nodes by manipulating
                         existing
                        // append y to x
                        x.appendChild(y)
                         
                        // insert y to x before z
                        x.insertBefore(y,z)
                         
                        // remove y from x
                        x.removeChild(y)
                         
                        // replace y with z
                        x.replaceChild(y,z)


Friday, April 12, 13
Change Style
                       • Use .style property to set an element
                         style
                       • Note style keys are almost like CSS
                         property names

                        p.style.backgroundColor = 'blue';




Friday, April 12, 13
Q&A
         Handling Events




Friday, April 12, 13
DOM Lab
                       • Given the HTML at:
                         http://jsbin.com/ecitag/1/edit
                       • Use JavaScript to:
                        • write your name in the first <li> item
                          of the second list
                        • Change the H3 to H4
                        • Set all links to point to google.com

Friday, April 12, 13
DOM Lab


                       • Create a Money Converter calculator
                       • Support 3 currencies




Friday, April 12, 13
Ad

More Related Content

What's hot (20)

Web Performance Tips
Web Performance TipsWeb Performance Tips
Web Performance Tips
Ravi Raj
 
Javascript inside Browser (DOM)
Javascript inside Browser (DOM)Javascript inside Browser (DOM)
Javascript inside Browser (DOM)
Vlad Mysla
 
Scripting The Dom
Scripting The DomScripting The Dom
Scripting The Dom
Ara Pehlivanian
 
Angular - Chapter 4 - Data and Event Handling
 Angular - Chapter 4 - Data and Event Handling Angular - Chapter 4 - Data and Event Handling
Angular - Chapter 4 - Data and Event Handling
WebStackAcademy
 
Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2
borkweb
 
jQuery -Chapter 2 - Selectors and Events
jQuery -Chapter 2 - Selectors and Events jQuery -Chapter 2 - Selectors and Events
jQuery -Chapter 2 - Selectors and Events
WebStackAcademy
 
Frontend Engineer Toolbox
Frontend Engineer ToolboxFrontend Engineer Toolbox
Frontend Engineer Toolbox
Ynon Perek
 
jQuery - Chapter 1 - Introduction
 jQuery - Chapter 1 - Introduction jQuery - Chapter 1 - Introduction
jQuery - Chapter 1 - Introduction
WebStackAcademy
 
KMUTNB - Internet Programming 4/7
KMUTNB - Internet Programming 4/7KMUTNB - Internet Programming 4/7
KMUTNB - Internet Programming 4/7
phuphax
 
Java script
Java scriptJava script
Java script
Sukrit Gupta
 
lect9
lect9lect9
lect9
tutorialsruby
 
AJAX Workshop Notes
AJAX Workshop NotesAJAX Workshop Notes
AJAX Workshop Notes
Pamela Fox
 
jQuery introduction
jQuery introductionjQuery introduction
jQuery introduction
Tomi Juhola
 
Web Components
Web ComponentsWeb Components
Web Components
Nikolaus Graf
 
jQuery - Chapter 3 - Effects
jQuery - Chapter 3 - Effects  jQuery - Chapter 3 - Effects
jQuery - Chapter 3 - Effects
WebStackAcademy
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
Vivek Rajan
 
Introduction to java_script
Introduction to java_scriptIntroduction to java_script
Introduction to java_script
Basavaraj Hampali
 
Angular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP ServicesAngular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP Services
WebStackAcademy
 
Introduction to Prototype JS Framework
Introduction to Prototype JS FrameworkIntroduction to Prototype JS Framework
Introduction to Prototype JS Framework
Mohd Imran
 
Internet and Web Technology (CLASS-9) [React.js] | NIC/NIELIT Web Technology
Internet and Web Technology (CLASS-9) [React.js] | NIC/NIELIT Web TechnologyInternet and Web Technology (CLASS-9) [React.js] | NIC/NIELIT Web Technology
Internet and Web Technology (CLASS-9) [React.js] | NIC/NIELIT Web Technology
Ayes Chinmay
 
Web Performance Tips
Web Performance TipsWeb Performance Tips
Web Performance Tips
Ravi Raj
 
Javascript inside Browser (DOM)
Javascript inside Browser (DOM)Javascript inside Browser (DOM)
Javascript inside Browser (DOM)
Vlad Mysla
 
Angular - Chapter 4 - Data and Event Handling
 Angular - Chapter 4 - Data and Event Handling Angular - Chapter 4 - Data and Event Handling
Angular - Chapter 4 - Data and Event Handling
WebStackAcademy
 
Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2
borkweb
 
jQuery -Chapter 2 - Selectors and Events
jQuery -Chapter 2 - Selectors and Events jQuery -Chapter 2 - Selectors and Events
jQuery -Chapter 2 - Selectors and Events
WebStackAcademy
 
Frontend Engineer Toolbox
Frontend Engineer ToolboxFrontend Engineer Toolbox
Frontend Engineer Toolbox
Ynon Perek
 
jQuery - Chapter 1 - Introduction
 jQuery - Chapter 1 - Introduction jQuery - Chapter 1 - Introduction
jQuery - Chapter 1 - Introduction
WebStackAcademy
 
KMUTNB - Internet Programming 4/7
KMUTNB - Internet Programming 4/7KMUTNB - Internet Programming 4/7
KMUTNB - Internet Programming 4/7
phuphax
 
AJAX Workshop Notes
AJAX Workshop NotesAJAX Workshop Notes
AJAX Workshop Notes
Pamela Fox
 
jQuery introduction
jQuery introductionjQuery introduction
jQuery introduction
Tomi Juhola
 
jQuery - Chapter 3 - Effects
jQuery - Chapter 3 - Effects  jQuery - Chapter 3 - Effects
jQuery - Chapter 3 - Effects
WebStackAcademy
 
Angular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP ServicesAngular - Chapter 7 - HTTP Services
Angular - Chapter 7 - HTTP Services
WebStackAcademy
 
Introduction to Prototype JS Framework
Introduction to Prototype JS FrameworkIntroduction to Prototype JS Framework
Introduction to Prototype JS Framework
Mohd Imran
 
Internet and Web Technology (CLASS-9) [React.js] | NIC/NIELIT Web Technology
Internet and Web Technology (CLASS-9) [React.js] | NIC/NIELIT Web TechnologyInternet and Web Technology (CLASS-9) [React.js] | NIC/NIELIT Web Technology
Internet and Web Technology (CLASS-9) [React.js] | NIC/NIELIT Web Technology
Ayes Chinmay
 

Viewers also liked (20)

Angularjs Basics
Angularjs BasicsAngularjs Basics
Angularjs Basics
Anuradha Bandara
 
Scalable JavaScript
Scalable JavaScriptScalable JavaScript
Scalable JavaScript
Ynon Perek
 
Dom selecting & jQuery
Dom selecting & jQueryDom selecting & jQuery
Dom selecting & jQuery
Kim Hunmin
 
03 Advanced JavaScript
03 Advanced JavaScript03 Advanced JavaScript
03 Advanced JavaScript
Ynon Perek
 
02 JavaScript Syntax
02 JavaScript Syntax02 JavaScript Syntax
02 JavaScript Syntax
Ynon Perek
 
Introduction to the DOM
Introduction to the DOMIntroduction to the DOM
Introduction to the DOM
tharaa abu ashour
 
DOM Features You Didn’t Know Existed
DOM Features You Didn’t Know ExistedDOM Features You Didn’t Know Existed
DOM Features You Didn’t Know Existed
FITC
 
Working with Arrays in JavaScript
Working with Arrays in JavaScriptWorking with Arrays in JavaScript
Working with Arrays in JavaScript
Florence Davis
 
Javascript basics
Javascript basicsJavascript basics
Javascript basics
Solv AS
 
Intro to SVGs
Intro to SVGsIntro to SVGs
Intro to SVGs
Ynon Perek
 
Javascript - Array - Writing
Javascript - Array - WritingJavascript - Array - Writing
Javascript - Array - Writing
Samuel Santos
 
MEAN Stack NYC Meetup 20150717: TDD Your AngularJS + Ionic Directives With jQ...
MEAN Stack NYC Meetup 20150717: TDD Your AngularJS + Ionic Directives With jQ...MEAN Stack NYC Meetup 20150717: TDD Your AngularJS + Ionic Directives With jQ...
MEAN Stack NYC Meetup 20150717: TDD Your AngularJS + Ionic Directives With jQ...
Valeri Karpov
 
Css2
Css2Css2
Css2
Ynon Perek
 
Next Generation Web Attacks – HTML 5, DOM(L3) and XHR(L2)
Next Generation Web Attacks – HTML 5, DOM(L3) and XHR(L2)Next Generation Web Attacks – HTML 5, DOM(L3) and XHR(L2)
Next Generation Web Attacks – HTML 5, DOM(L3) and XHR(L2)
Shreeraj Shah
 
AngularJS for designers and developers
AngularJS for designers and developersAngularJS for designers and developers
AngularJS for designers and developers
Kai Koenig
 
Html5 apis
Html5 apisHtml5 apis
Html5 apis
Ynon Perek
 
Arrays
ArraysArrays
Arrays
fahadshakeel
 
Dom API In Java Script
Dom API In Java ScriptDom API In Java Script
Dom API In Java Script
Rajat Pandit
 
Writing Reusable Web Components with jQuery and jQuery UI
Writing Reusable Web Components with jQuery and jQuery UIWriting Reusable Web Components with jQuery and jQuery UI
Writing Reusable Web Components with jQuery and jQuery UI
Ynon Perek
 
Performance
PerformancePerformance
Performance
Ynon Perek
 
Scalable JavaScript
Scalable JavaScriptScalable JavaScript
Scalable JavaScript
Ynon Perek
 
Dom selecting & jQuery
Dom selecting & jQueryDom selecting & jQuery
Dom selecting & jQuery
Kim Hunmin
 
03 Advanced JavaScript
03 Advanced JavaScript03 Advanced JavaScript
03 Advanced JavaScript
Ynon Perek
 
02 JavaScript Syntax
02 JavaScript Syntax02 JavaScript Syntax
02 JavaScript Syntax
Ynon Perek
 
DOM Features You Didn’t Know Existed
DOM Features You Didn’t Know ExistedDOM Features You Didn’t Know Existed
DOM Features You Didn’t Know Existed
FITC
 
Working with Arrays in JavaScript
Working with Arrays in JavaScriptWorking with Arrays in JavaScript
Working with Arrays in JavaScript
Florence Davis
 
Javascript basics
Javascript basicsJavascript basics
Javascript basics
Solv AS
 
Javascript - Array - Writing
Javascript - Array - WritingJavascript - Array - Writing
Javascript - Array - Writing
Samuel Santos
 
MEAN Stack NYC Meetup 20150717: TDD Your AngularJS + Ionic Directives With jQ...
MEAN Stack NYC Meetup 20150717: TDD Your AngularJS + Ionic Directives With jQ...MEAN Stack NYC Meetup 20150717: TDD Your AngularJS + Ionic Directives With jQ...
MEAN Stack NYC Meetup 20150717: TDD Your AngularJS + Ionic Directives With jQ...
Valeri Karpov
 
Next Generation Web Attacks – HTML 5, DOM(L3) and XHR(L2)
Next Generation Web Attacks – HTML 5, DOM(L3) and XHR(L2)Next Generation Web Attacks – HTML 5, DOM(L3) and XHR(L2)
Next Generation Web Attacks – HTML 5, DOM(L3) and XHR(L2)
Shreeraj Shah
 
AngularJS for designers and developers
AngularJS for designers and developersAngularJS for designers and developers
AngularJS for designers and developers
Kai Koenig
 
Dom API In Java Script
Dom API In Java ScriptDom API In Java Script
Dom API In Java Script
Rajat Pandit
 
Writing Reusable Web Components with jQuery and jQuery UI
Writing Reusable Web Components with jQuery and jQuery UIWriting Reusable Web Components with jQuery and jQuery UI
Writing Reusable Web Components with jQuery and jQuery UI
Ynon Perek
 
Ad

Similar to JavaScript DOM Manipulations (20)

Fork cli tool
Fork cli toolFork cli tool
Fork cli tool
jelmersnoeck
 
Building Your First Store App with XAML and C#
Building Your First Store App with XAML and C#Building Your First Store App with XAML and C#
Building Your First Store App with XAML and C#
Tamir Dresher
 
Fast mobile web apps
Fast mobile web appsFast mobile web apps
Fast mobile web apps
Ivano Malavolta
 
Bundling Client Side Assets
Bundling Client Side AssetsBundling Client Side Assets
Bundling Client Side Assets
Timothy Oxley
 
Integrate Spring MVC with RequireJS & Backbone.js & Spring Data JPA
Integrate Spring MVC with RequireJS & Backbone.js & Spring Data JPAIntegrate Spring MVC with RequireJS & Backbone.js & Spring Data JPA
Integrate Spring MVC with RequireJS & Backbone.js & Spring Data JPA
Cheng Ta Yeh
 
Speeding up mobile web apps
Speeding up mobile web appsSpeeding up mobile web apps
Speeding up mobile web apps
Ivano Malavolta
 
component: ruby gems for the browser
component: ruby gems for the browsercomponent: ruby gems for the browser
component: ruby gems for the browser
Timothy Oxley
 
MongoTalk/Voyage
MongoTalk/VoyageMongoTalk/Voyage
MongoTalk/Voyage
ESUG
 
Building with JavaScript - write less by using the right tools
Building with JavaScript -  write less by using the right toolsBuilding with JavaScript -  write less by using the right tools
Building with JavaScript - write less by using the right tools
Christian Heilmann
 
Custom Android Code Templates
Custom Android Code TemplatesCustom Android Code Templates
Custom Android Code Templates
murphonic
 
Fast Cordova applications
Fast Cordova applicationsFast Cordova applications
Fast Cordova applications
Ivano Malavolta
 
XPages Blast - Lotusphere 2013
XPages Blast - Lotusphere 2013XPages Blast - Lotusphere 2013
XPages Blast - Lotusphere 2013
Tim Clark
 
Writing JavaScript that doesn't suck
Writing JavaScript that doesn't suckWriting JavaScript that doesn't suck
Writing JavaScript that doesn't suck
Ross Bruniges
 
Jazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Jazz up your JavaScript: Unobtrusive scripting with JavaScript librariesJazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Jazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Simon Willison
 
XPages Blast - Lotusphere 2012
XPages Blast - Lotusphere 2012XPages Blast - Lotusphere 2012
XPages Blast - Lotusphere 2012
Tim Clark
 
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSTek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Pablo Godel
 
Augmented Reality with JavaScript and Appcelerator Titanium
Augmented Reality with JavaScript and Appcelerator TitaniumAugmented Reality with JavaScript and Appcelerator Titanium
Augmented Reality with JavaScript and Appcelerator Titanium
Jeff Bonnes
 
Performance & Responsive Web Design
Performance & Responsive Web DesignPerformance & Responsive Web Design
Performance & Responsive Web Design
Zach Leatherman
 
Document Object Model
Document Object ModelDocument Object Model
Document Object Model
chomas kandar
 
Document Object Model
Document Object ModelDocument Object Model
Document Object Model
chomas kandar
 
Building Your First Store App with XAML and C#
Building Your First Store App with XAML and C#Building Your First Store App with XAML and C#
Building Your First Store App with XAML and C#
Tamir Dresher
 
Bundling Client Side Assets
Bundling Client Side AssetsBundling Client Side Assets
Bundling Client Side Assets
Timothy Oxley
 
Integrate Spring MVC with RequireJS & Backbone.js & Spring Data JPA
Integrate Spring MVC with RequireJS & Backbone.js & Spring Data JPAIntegrate Spring MVC with RequireJS & Backbone.js & Spring Data JPA
Integrate Spring MVC with RequireJS & Backbone.js & Spring Data JPA
Cheng Ta Yeh
 
Speeding up mobile web apps
Speeding up mobile web appsSpeeding up mobile web apps
Speeding up mobile web apps
Ivano Malavolta
 
component: ruby gems for the browser
component: ruby gems for the browsercomponent: ruby gems for the browser
component: ruby gems for the browser
Timothy Oxley
 
MongoTalk/Voyage
MongoTalk/VoyageMongoTalk/Voyage
MongoTalk/Voyage
ESUG
 
Building with JavaScript - write less by using the right tools
Building with JavaScript -  write less by using the right toolsBuilding with JavaScript -  write less by using the right tools
Building with JavaScript - write less by using the right tools
Christian Heilmann
 
Custom Android Code Templates
Custom Android Code TemplatesCustom Android Code Templates
Custom Android Code Templates
murphonic
 
Fast Cordova applications
Fast Cordova applicationsFast Cordova applications
Fast Cordova applications
Ivano Malavolta
 
XPages Blast - Lotusphere 2013
XPages Blast - Lotusphere 2013XPages Blast - Lotusphere 2013
XPages Blast - Lotusphere 2013
Tim Clark
 
Writing JavaScript that doesn't suck
Writing JavaScript that doesn't suckWriting JavaScript that doesn't suck
Writing JavaScript that doesn't suck
Ross Bruniges
 
Jazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Jazz up your JavaScript: Unobtrusive scripting with JavaScript librariesJazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Jazz up your JavaScript: Unobtrusive scripting with JavaScript libraries
Simon Willison
 
XPages Blast - Lotusphere 2012
XPages Blast - Lotusphere 2012XPages Blast - Lotusphere 2012
XPages Blast - Lotusphere 2012
Tim Clark
 
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJSTek 2013 - Building Web Apps from a New Angle with AngularJS
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Pablo Godel
 
Augmented Reality with JavaScript and Appcelerator Titanium
Augmented Reality with JavaScript and Appcelerator TitaniumAugmented Reality with JavaScript and Appcelerator Titanium
Augmented Reality with JavaScript and Appcelerator Titanium
Jeff Bonnes
 
Performance & Responsive Web Design
Performance & Responsive Web DesignPerformance & Responsive Web Design
Performance & Responsive Web Design
Zach Leatherman
 
Document Object Model
Document Object ModelDocument Object Model
Document Object Model
chomas kandar
 
Document Object Model
Document Object ModelDocument Object Model
Document Object Model
chomas kandar
 
Ad

More from Ynon Perek (20)

Regexp
RegexpRegexp
Regexp
Ynon Perek
 
Html5 intro
Html5 introHtml5 intro
Html5 intro
Ynon Perek
 
09 performance
09 performance09 performance
09 performance
Ynon Perek
 
Mobile Web Intro
Mobile Web IntroMobile Web Intro
Mobile Web Intro
Ynon Perek
 
Qt multi threads
Qt multi threadsQt multi threads
Qt multi threads
Ynon Perek
 
Vimperl
VimperlVimperl
Vimperl
Ynon Perek
 
Syllabus
SyllabusSyllabus
Syllabus
Ynon Perek
 
Mobile Devices
Mobile DevicesMobile Devices
Mobile Devices
Ynon Perek
 
Network
NetworkNetwork
Network
Ynon Perek
 
Architecture app
Architecture appArchitecture app
Architecture app
Ynon Perek
 
Cryptography
CryptographyCryptography
Cryptography
Ynon Perek
 
Unit Testing JavaScript Applications
Unit Testing JavaScript ApplicationsUnit Testing JavaScript Applications
Unit Testing JavaScript Applications
Ynon Perek
 
How to write easy-to-test JavaScript
How to write easy-to-test JavaScriptHow to write easy-to-test JavaScript
How to write easy-to-test JavaScript
Ynon Perek
 
Introduction to Selenium and Ruby
Introduction to Selenium and RubyIntroduction to Selenium and Ruby
Introduction to Selenium and Ruby
Ynon Perek
 
Introduction To Web Application Testing
Introduction To Web Application TestingIntroduction To Web Application Testing
Introduction To Web Application Testing
Ynon Perek
 
Accessibility
AccessibilityAccessibility
Accessibility
Ynon Perek
 
Angularjs
AngularjsAngularjs
Angularjs
Ynon Perek
 
Js memory
Js memoryJs memory
Js memory
Ynon Perek
 
Qt Design Patterns
Qt Design PatternsQt Design Patterns
Qt Design Patterns
Ynon Perek
 
Web Application Security
Web Application SecurityWeb Application Security
Web Application Security
Ynon Perek
 
09 performance
09 performance09 performance
09 performance
Ynon Perek
 
Mobile Web Intro
Mobile Web IntroMobile Web Intro
Mobile Web Intro
Ynon Perek
 
Qt multi threads
Qt multi threadsQt multi threads
Qt multi threads
Ynon Perek
 
Mobile Devices
Mobile DevicesMobile Devices
Mobile Devices
Ynon Perek
 
Architecture app
Architecture appArchitecture app
Architecture app
Ynon Perek
 
Unit Testing JavaScript Applications
Unit Testing JavaScript ApplicationsUnit Testing JavaScript Applications
Unit Testing JavaScript Applications
Ynon Perek
 
How to write easy-to-test JavaScript
How to write easy-to-test JavaScriptHow to write easy-to-test JavaScript
How to write easy-to-test JavaScript
Ynon Perek
 
Introduction to Selenium and Ruby
Introduction to Selenium and RubyIntroduction to Selenium and Ruby
Introduction to Selenium and Ruby
Ynon Perek
 
Introduction To Web Application Testing
Introduction To Web Application TestingIntroduction To Web Application Testing
Introduction To Web Application Testing
Ynon Perek
 
Qt Design Patterns
Qt Design PatternsQt Design Patterns
Qt Design Patterns
Ynon Perek
 
Web Application Security
Web Application SecurityWeb Application Security
Web Application Security
Ynon Perek
 

Recently uploaded (20)

Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 

JavaScript DOM Manipulations

  • 1. JavaScript DOM Manipulations and Events Slides By: Ynon Perek Fine me at: http://ynonperek.com Friday, April 12, 13
  • 2. The Task Read text Make web <BODY BGCOLOR='#FFFFFF' style="overflow:hidden;" LEFTMARGIN=0 MARGINWIDTH=0 TOPMARGIN=0 MARGINHEIGHT=0 CLASS="text" onload="DisplayAD();" onresize="if(typeof DZresize == 'function'){DZresize();};if(typeof dcOnResize == 'function'){dcOnResize();};if(typeof disYnetAdColOnResize == 'function'){disYnetAdColOnResize();};" lang=he><div id='divRedAlert' style='display:none;'></div><iframe id=frmRedAlert name=frmRedAlert frameborder=0 width=0 height=0 MARGINHEIGHT=0 MARGINWIDTH=0 src='/Ext/App/RedAlert/ CdaRedAlert_iframe/0,12639,84-234-208-20,00.html'></iframe><div id='ads.ozen' style='position:absolute;z-index:2;left:0;top:0;'></div><div id='ads.elvisR.1' style='position:absolute;z-index:2;right:0;top:0;'></ div><div id=mainCont style="overflow:hidden; width:100%; height:100%;" align=center ><div id='mainSpacer' style='overflow:auto;height: 100%'><script> <style>A.brightgrey:link{color:#7d7f7e} A.brightgrey:visited{color:#7d7f7e}A.brightgrey:active{color:#7d7f7e} A.brightgrey:hover{color:#f00}A.upnvl{color:#7d7f80} A.upnvl:visited{color:#7d7f80}A.upnvl:hover{color:#f00} A.btnvl{color:#7f90b0}A.btnvl:visited{color:#7f90b0} A.btnvl:hover{color:#f00}</style><table id=tbl_logos cellspacing=0 cetd width='46' align='left' style='line-height:12px;'><a href='http:// www.ynetnews.com/home/0,7340,L-3083,00.html' class='text11 btnvl'>English</a></td></tr></table></div></td><td width=11>&nbsp;</ td><td width=2 bgcolor=black></td><td width=11>&nbsp;</td><td width=132 valign=top style='direction: rtl;' class='ghci3' ><div id=divMainLogo style='margin-top:1px;'></div></td><td width=11><div style='width:11px;'></div></td><TD WIDTH=194 align=right dir=rtl VALIGN=top class='ghciTopStoryMain1' ><div dir=ltr style='height: 38px;overflow:hidden;'><IMG SRC='/Common/Files/Images/Date/12.gif' alt="12/04/2013 11:20"><IMG SRC='/Common/Files/Images/D... Friday, April 12, 13
  • 3. How Browsers Render • Each browser has a Rendering Engine • Rendering Engine takes an HTML text and produces a DOM tree Friday, April 12, 13
  • 4. Rendering Engines Engine Browser Developer Blink Google Chrome Google Gecko Mozilla Firefox Mozilla Trident IE Microsoft Apple, KDE, Nokia, Webkit Apple Safari Others Friday, April 12, 13
  • 5. How Browsers Work Parse HTML to make DOM Tree Build Render Tree from CSS Layout Elements Paint Friday, April 12, 13
  • 6. What’s a DOM Tree <html> <body> <p> Hello World </p> <div> <img src="example.png"/> </div> </body> </html> Friday, April 12, 13
  • 8. Rendering DOM Tree • A Render tree is derived from DOM tree • It’s not a 1-1 relation Friday, April 12, 13
  • 9. Browser Flow • Read page as text • Create DOM tree • Create Render tree • Paint Friday, April 12, 13
  • 10. Enter JavaScript • Read page as text • Create DOM tree JavaScript Manipulates the • Create Render tree data • Paint Friday, April 12, 13
  • 11. Enter JavaScript • JavaScript alters page load • JavaScript alters DOM Tree • JavaScript creates interactivity through events handling Friday, April 12, 13
  • 12. JavaScript and DOM <!DOCTYPE html> <html> <head>   <title></title> </head> <body> A <script> element is   <script>     var x = 5; executed in place     var y = 3;     console.log('Hello From JS');   </script>   <p>This is just some text</p> </body> </html> Friday, April 12, 13
  • 13. Q&A Browser Page Rendering Friday, April 12, 13
  • 14. Interactive Apps • Browser is a programming platform • A web application is interactive Friday, April 12, 13
  • 15. Interactivity • Browser itself is interactive • In addition: A web page is interactive • Demo Friday, April 12, 13
  • 16. Browser Events Loop Event Queue click Friday, April 12, 13
  • 17. Event Loop Wait for Events Handle Events Friday, April 12, 13
  • 18. Event Loop Wait for Events Handle Events Friday, April 12, 13
  • 19. Event Loop Wait for Events Handle Events Friday, April 12, 13
  • 20. Event Handling DOM Node + Event Handler (code) Event Friday, April 12, 13
  • 21. Code Outline • From HTML: • <a on...=”handleEvent()”> Friday, April 12, 13
  • 22. Code Outline • But this can get messy <a href="#" onclick="doclick"     onblur="doblur"     onchange="dochange"     ondblclick="dodblclick"     onmousemove="domove"     onmouseover="doover"> Too many events</a> Friday, April 12, 13
  • 23. Code Outline • From JS • Get a DOM node • Bind event to code Friday, April 12, 13
  • 24. Getting DOM Nodes • getElementById(...) • getElementsByTagName(...) • querySelector(...) - IE8 and up Friday, April 12, 13
  • 25. Browser Events • All browsers use: node.onevent = ... • IE uses: node.attachEvent(...) • Other browsers use node.addEventListener(...) Friday, April 12, 13
  • 26. Demo: Events • Write a simple page that shows alert as a response to click event • Modify to change text of element Friday, April 12, 13
  • 27. Using the Event Object • Event object includes info on the event • Print it to console for inspection   <button>Click Me</button>     <script>     var btn = document.getElementsByTagName('button')[0];     btn.onclick = function(e) {       if ( ! e ) e = window.event;         console.dir( e );     };   </script> Friday, April 12, 13
  • 28. Capturing vs. Bubbling | | / ---------------| |----------------- ---------------| |----------------- | element1 | | | | element1 | | | | -----------| |----------- | | -----------| |----------- | | |element2 / | | | |element2 | | | | | ------------------------- | | ------------------------- | | Event CAPTURING | | Event BUBBLING | ----------------------------------- ----------------------------------- Friday, April 12, 13
  • 29. Capturing vs. Bubbling | | / ---------------| |----------------- ---------------| |----------------- | element1 | | | | element1 | | | | -----------| |----------- | | -----------| |----------- | | |element2 / | | | |element2 | | | | | ------------------------- | | ------------------------- | | Event CAPTURING | | Event BUBBLING | ----------------------------------- ----------------------------------- Netscape Microsoft Friday, April 12, 13
  • 30. Capturing vs. Bubbling | | / -----------------| |--| |----------------- | element1 | | | | | | -------------| |--| |----------- | | |element2 / | | | | | -------------------------------- | | W3C event model | ------------------------------------------ Friday, April 12, 13
  • 31. Capturing vs. Bubbling • node.addEventListener takes a third parameter • true means capturing • false means bubbling • defaults to false Friday, April 12, 13
  • 32. Demo • Capture all click events using document.onclick = ... Friday, April 12, 13
  • 33. Usages • Default event handlers • Dynamic event handlers Friday, April 12, 13
  • 34. Double Handlers element1.onclick = Element2 doSomething; Element1 element2.onclick = doSomething; Friday, April 12, 13
  • 35. Double Handlers function doSomething(e) {       if ( ! e ) e = window.event; Element2         // this refers to Element1 // the current element       // for inner event: // this = element2       // for outer event: // this = element1 } Friday, April 12, 13
  • 36. Event Types Interface Events Mouse Events Form Events load, unload click, dblclick submit mousedown, mouseup, resize, scroll, reset mousemove focus, blur mouseover, mouseout Friday, April 12, 13
  • 37. Default Action • Some events also have a “default” action • For example: A link will take you to another page by default Friday, April 12, 13
  • 38. Default Action • Possible to prevent • return false from handler • Demo Friday, April 12, 13
  • 39. Q&A Handling Events Friday, April 12, 13
  • 40. Events Lab • Implement 5 duplicated input boxes • Each input box should have the same text • Change one -> all change automatically Friday, April 12, 13
  • 42. Altering Page Load • Change Document • Change DOM Tree • Change Render Tree Friday, April 12, 13
  • 43. Change Document • (Don’t) use document.write to change the document as it’s being loaded • Considered bad practice Friday, April 12, 13
  • 44. Change Document <!DOCTYPE html> <html> <head>   <title></title> </head> <body>   <script> document.write('<h1>Hello World</h1>'); </script>   <p>This is just some text</p> </body> </html> Friday, April 12, 13
  • 45. Change Document 1. Browser starts to create DOM tree body 2. Finds a script tag. script Stops to execute Friday, April 12, 13
  • 46. Change Document body 3. script added <h1> script h1 element to document Friday, April 12, 13
  • 47. Change Document body script h1 p 4. browser can continue to create the <p> Friday, April 12, 13
  • 48. Avoiding document.write • Can insert invalid content • Clobbers DOM if called after reading the document Friday, April 12, 13
  • 49. Friendlier Ways • Get a DOM node • Change it using DOM API Friday, April 12, 13
  • 50. Finding DOM Nodes Friday, April 12, 13
  • 51. DOM Traversal <body> body   <div>     <h1>Header</h1>     <p>       <img src="..." /> #text #div #text       Paragraph text       <a href="#">google</a> #text #text #h1 #text #p     </p>   </div> </body> Friday, April 12, 13
  • 52. DOM Traversal • n.childNodes[] • n.firstChild • n.lastChild • n.nextSibling • n.parentNode • n.previousSibling Friday, April 12, 13
  • 53. The (Past) Future • document.querySelector takes any CSS selector and fetches DOM element • Supported in IE8 and later Friday, April 12, 13
  • 54. DOM API • Allows • Getting info on elements • Changing element attributes • Creating new elements • Setting elements style Friday, April 12, 13
  • 55. DOM API • Use x.nodeName to get the tag name if ( this.nodeName === 'INPUT' ){   // handle input element } Friday, April 12, 13
  • 56. DOM API • Use x.nodeValue to get/set the node value a.firstChild.nodeValue = 'Go to google'; Friday, April 12, 13
  • 57. DOM API • Use getAttribute / setAttribute to change element attributes a.setAttribute('href', 'http://www.google.com'); Friday, April 12, 13
  • 58. Creating New Elements • Create elements and text nodes using document • Later you can add them to the DOM document.createElement('P'); document.createTextNode('Hello World'); Friday, April 12, 13
  • 59. Creating New Elements • Insert new nodes by manipulating existing // append y to x x.appendChild(y)   // insert y to x before z x.insertBefore(y,z)   // remove y from x x.removeChild(y)   // replace y with z x.replaceChild(y,z) Friday, April 12, 13
  • 60. Change Style • Use .style property to set an element style • Note style keys are almost like CSS property names p.style.backgroundColor = 'blue'; Friday, April 12, 13
  • 61. Q&A Handling Events Friday, April 12, 13
  • 62. DOM Lab • Given the HTML at: http://jsbin.com/ecitag/1/edit • Use JavaScript to: • write your name in the first <li> item of the second list • Change the H3 to H4 • Set all links to point to google.com Friday, April 12, 13
  • 63. DOM Lab • Create a Money Converter calculator • Support 3 currencies Friday, April 12, 13