Lecture 9: TIMERS and The DoM tree

Slides:



Advertisements
Similar presentations
The DOM tree CS The DOM tree CS380 2 Types of DOM nodes  element nodes (HTML tag)  can have children and/or attributes  text nodes (text in.
Advertisements

Cascading Style Sheets
Presenter: James Huang Date: Sept. 26,  Introduction  Basics  Lists  Links  Forms  CSS 2.
The Document Object Model (DOM) 1 JavaScript is an object-based language—that is, it’s based on manipulating objects by changing each object’s properties.
JQuery CS 380: Web Programming. What is jQuery? jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling,
Web Pages and Style Sheets Bert Wachsmuth. HTML versus XHTML XHTML is a stricter version of HTML: HTML + stricter rules = XHTML. XHTML Rule violations:
DOM and timers CS Problems with JavaScript JavaScript is a powerful language, but it has many flaws:  the DOM can be clunky to use  the same code.
Chapter 6 Basic forms 1. Forms and query string 2 form : a group of user input (UI) controls that accepts information from the user and sends the information.
Tutorial 16 Working with Dynamic Content and Styles.
 2008 Pearson Education, Inc. All rights reserved Document Object Model (DOM): Objects and Collections.
Form Basics CS Web Data  Most interesting web pages revolve around data  examples: Google, IMDB, Digg, Facebook, YouTube, Rotten Tomatoes  can.
CSS (Cascading Style Sheets): How the web is styled Create Rules that specify how the content of an HTML Element should appear. CSS controls how your web.
More Event-Driven Programming Chapter Exercise Make a button whose label toggles between "on" and "off".
Forms, Validation Week 7 INFM 603. Announcements Try placing today’s example in htdocs (XAMPP). This will allow you to execute examples that rely on PHP.
CSE 154 LECTURE 9: FORMS. Web data most interesting web pages revolve around data examples: Google, IMDB, Digg, Facebook, YouTube, Rotten Tomatoes can.
Tutorial #9 – Creating Forms. Tutorial #8 Review – Tables Borders (table, gridlines), Border-collapse: collapse; empty-cells: show; and rowspan, colspan.
DOM and timers CS Problems with JavaScript JavaScript is a powerful language, but it has many flaws:  the DOM can be clunky to use  the same code.
HTML DOM.  The HTML DOM defines a standard way for accessing and manipulating HTML documents.  The DOM presents an HTML document as a tree- structure.
JS: Document Object Model (DOM)
JQuery 10/21. Today jQuery Some cool tools around the web JavaScript Libraries Drawing libraries HTML Frameworks Conventions.
Unobtrusive JavaScript
D2L Notes Be sure to submit your link in the dropbox provided on D2L You can just upload an empty text file if a file upload is required Do not use D2L.
CSE 154 LECTURE 19: EVENTS AND TIMERS. Anonymous functions function(parameters) { statements; } JS JavaScript allows you to declare anonymous functions.
The DOM tree CS The DOM tree CS380 2 Types of DOM nodes  element nodes (HTML tag)  can have children and/or attributes  text nodes (text in.
Tutorial 7 Creating Forms. Objectives Session 7.1 – Create an HTML form – Insert fields for text – Add labels for form elements – Create radio buttons.
JavaScript – The DOM JavaScript is object based The browser is object based – We can access the browser's objects in the same way we did JavaScript's Two.
5.2 DOM (Document Object Model). 2 Motto: To write it, it took three months; to conceive it three minutes; to collect the data in it — all my life. —F.
CSE 154 LECTURE 18: THE DOCUMENT OBJECT MODEL (DOM); UNOBTRUSIVE JAVASCRIPT.
CSE 154 Lecture 20: The DoM tree.
>> More on CSS Selectors. Pre-requisite Open the file called sample.txt Copy the all the text from the file Open your browser and go to codepen.io Paste.
Internet & World Wide Web How to Program, 5/e. © by Pearson Education, Inc. All Rights Reserved.2 Revised by Dr. T. Tran for CSI3140.
1 Javascript DOM Peter Atkinson. 2 Objectives Understand the nature and structure of the DOM Add and remove content from the page Access and change element.
 2008 Pearson Education, Inc. All rights reserved Document Object Model (DOM): Objects and Collections.
JQuery JavaScript is a powerful language but it is not always easy to work with. jQuery is a JavaScript library that helps with: – HTML document traversal.
Modifying HTML attributes and CSS values. Learning Objectives By the end of this lecture, you should be able to: – Select based on a class (as opposed.
Lecture 8: Events and timers
Events CS The keyword this  all JavaScript code actually runs inside of an object  by default, code runs inside the global window object  all.
CSE 154 LECTURE 7: THE DOCUMENT OBJECT MODEL (DOM); UNOBTRUSIVE JAVASCRIPT.
JS: Document Object Model (DOM) DOM stands for Document Object Model, and allows programmers generic access to: DOM stands for Document Object Model, and.
Week 3: Introduction to jQuery and Adv. Javascript.
CSE 154 LECTURE 9: THE DOM TREE. The DOM tree The elements of a page are nested into a tree-like structure of objects the DOM has properties and methods.
CSE 154 LECTURE 10: MORE EVENTS. Problems with reading/changing styles Click Me HTML window.onload = function() { document.getElementById("clickme").onclick.
XP Tutorial 10 New Perspectives on JavaScript, Comprehensive 1 Working with Dynamic Content and Styles Creating a Dynamic Table of Contents.
Advanced Topics in Concurrency and Reactive Programming: HTML, CSS and DOM Trees Majeed Kassis.
Introduction to.
JavaScript, Sixth Edition
Programming Web Pages with JavaScript
>> JavaScript: Document Object Model
Unit M Programming Web Pages with
Lecture 7: The Document Object Model (DOM); Unobtrusive JavaScript
>> Introduction to CSS
CGS 3066: Web Programming and Design Spring 2017
Introduction to Web programming
Lecture 9: Events and timers
Document Object Model (DOM): Objects and Collections
Web Programming A different world! Three main languages/tools No Java
CSE 154 Lecture 11: More Events.
LING 408/508: Computational Techniques for Linguists
Lecture 11: Keyboard Events
CSE 337 Lecture 10: Events.
CSc 337 Lecture 15: Review.
Lecture 7: Unobtrusive JavaScript
CSE 337 Lecture 10: Events.
CSc 337 Lecture 9: The DoM tree.
Lecture 11: Keyboard Events
Lecture 8: Events and timers
Lecture 7: Unobtrusive JavaScript
Web Programming and Design
Web Programming and Design
Modifying HTML attributes and CSS values
Presentation transcript:

Lecture 9: TIMERS and The DoM tree CSc 337 Lecture 9: TIMERS and The DoM tree

Exercise: stop watch Create a page that allows the user to input an amount of time and, when the user clicks a button, counts down one second at a time. An "all done" message should be displayed when the time is up.

Setting a timer method description setTimeout(function, delayMS); arranges to call given function after given delay in ms setInterval(function, delayMS); arranges to call function repeatedly every delayMS ms clearTimeout(timerID);  clearInterval(timerID); stops the given timer both setTimeout and setInterval return an ID representing the timer this ID can be passed to clearTimeout/Interval later to stop the timer

Text labels: <label> <label><input type="radio" name="cc" value="visa" checked="checked" /> Visa</label> <label><input type="radio" name="cc" value="mastercard" /> MasterCard</label> <label><input type="radio" name="cc" value="amex" /> American Express</label> HTML output associates nearby text with control, so you can click text to activate control can be used with checkboxes or radio buttons label element can be targeted by CSS style rules

Grouping input: <fieldset>, <legend> groups of input fields with optional caption (block) <fieldset> <legend>Credit cards:</legend> <input type="radio" name="cc" value="visa" checked="checked" /> Visa <input type="radio" name="cc" value="mastercard" /> MasterCard <input type="radio" name="cc" value="amex" /> American Express </fieldset> HTML output fieldset groups related input fields, adds a border; legend supplies a caption

Drop-down list: <select>, <option> menus of choices that collapse and expand (inline) <select name="favoritecharacter"> <option>Jerry</option> <option>George</option> <option selected="selected">Kramer</option> <option>Elaine</option> </select> HTML output option element represents each choice select optional attributes: disabled, multiple, size optional selected attribute sets which one is initially chosen

DOM versus innerHTML hacking Why not just code this way? function slideClick() { document.getElementById("main").innerHTML += "<p>A paragraph!</p>"; } JS Imagine that the new node is more complex: ugly: bad style on many levels (e.g. JS code embedded within HTML) error-prone: must carefully distinguish " and ' can only add at beginning or end, not in middle of child list function slideClick() { document.getElementById("main").innerHTML += "<p style='color: red; " + "margin-left: 50px;' " + "onclick='myOnClick();'>" + "A paragraph!</p>"; } JS

The DOM tree The elements of a page are nested into a tree-like structure of objects the DOM has properties and methods for traversing this tree

Creating new nodes name description document.createElement("tag") creates and returns a new empty DOM node representing an element of that type document.createTextNode("text") creates and returns a text node containing given text // create a new <h2> node var newHeading = document.createElement("h2"); newHeading.innerHTML = "This is a heading"; newHeading.style.color = "green"; JS merely creating a element does not add it to the page you must add the new element as a child of an existing element on the page...

Modifying the DOM tree A paragraph! Every DOM element object has these methods: name description appendChild(node) places given node at end of this node's child list insertBefore(new, old) places the given new node in this node's child list just before old child removeChild(node) removes given node from this node's child list replaceChild(new, old) replaces given child with new node var p = document.createElement("p"); p.innerHTML = "A paragraph!"; document.getElementById("main").appendChild(p); JS A paragraph!

Complex DOM manipulation problems How would we do each of the following in JavaScript code? Each involves modifying each one of a group of elements ... When the Go button is clicked, reposition all the divs of class puzzle to random x/y locations. When the user hovers over the maze boundary, turn all maze walls red. Change every other item in the ul list with id of TAs to have a gray background.

Selecting groups of DOM objects methods in document and other DOM objects (* = HTML5): name description getElementsByTagName returns array of descendents with the given tag, such as "div" getElementsByName returns array of descendents with the given name attribute (mostly useful for accessing form controls) querySelector * returns the first element that would be matched by the given CSS selector string querySelectorAll * returns an array of all elements that would be matched by the given CSS selector string

Getting all elements of a certain type highlight all paragraphs in the document: var allParas = document.querySelectorAll("p"); for (var i = 0; i < allParas.length; i++) { allParas[i].style.backgroundColor = "yellow"; } JS <body> <p>This is the first paragraph</p> <p>This is the second paragraph</p> <p>You get the idea...</p> </body> HTML

Complex selectors highlight all paragraphs inside of the section with ID "address": // document.getElementById("address").getElementsByTagName("p") var addrParas = document.querySelectorAll("#address p"); for (var i = 0; i < addrParas.length; i++) { addrParas[i].style.backgroundColor = "yellow"; } JS <p>This won't be returned!</p> <div id="address"> <p>1234 Street</p> <p>Atlanta, GA</p> </div> HTML

Common querySelectorAll issues many students forget to write . or # in front of a class or id // get all buttons with a class of "control" var gameButtons = document.querySelectorAll("control"); var gameButtons = document.querySelectorAll(".control"); JS querySelectorAll returns an array, not a single element; must loop over the results (document.querySelector returns just the first element that matches, if that's what you want) // set all buttons with a class of "control" to have red text document.querySelectorAll(".gamebutton").style.color = "red"; var gameButtons = document.querySelector(".gamebutton"); for (var i = 0; i < gameButtons.length; i++) { gameButtons[i].style.color = "red"; } Q: Can I still select a group of elements using querySelectorAll even if my CSS file doesn't have any style rule for that same group? (A: Yes!)

Problems with reading/changing styles <button id="clickme">Click Me</button> HTML window.onload = function() { document.getElementById("clickme").onclick = biggerFont; }; function biggerFont() { var button = document.getElementById("clickme"); var size = parseInt(button.style.fontSize); button.style.fontSize = (size + 4) + "pt"; } JS output style property lets you set any CSS style for an element problem: you cannot read existing styles with it (you can read ones you set using the DOM .style, but not ones that are set in the CSS file)

Accessing elements' existing styles window.getComputedStyle(element).propertyName JS function biggerFont() { // turn text yellow and make it bigger var clickMe = document.getElementById("clickme"); var size = parseInt(window.getComputedStyle(clickMe).fontSize); clickMe.style.fontSize = (size + 4) + "pt"; } JS output getComputedStyle method of global window object accesses existing styles

Common bug: incorrect usage of existing styles the following example computes e.g. "200px" + 100 + "px" , which would evaluate to "200px100px" var main = document.getElementById("main"); main.style.top = window.getComputedStyle(main).top + 100 + "px“; // bad! JS a corrected version: main.style.top = parseInt(window.getComputedStyle(main).top) + 100 + "px"; // correct JS

Getting/setting CSS classes function highlightField() { // turn text yellow and make it bigger var text = document.getElementById("text"); if (!text.className) { text.className = "highlight"; } else if (text.className.indexOf("invalid") < 0) { text.className += " highlight"; // awkward } } JS JS DOM's className property corresponds to HTML class attribute somewhat clunky when dealing with multiple space-separated classes as one big string

Getting/setting CSS classes with classList function highlightField() { // turn text yellow and make it bigger var text = document.getElementById("text"); if (!text.classList.contains("invalid")) { text.classList.add("highlight"); } } JS classList collection has methods add, remove, contains, toggle to manipulate CSS classes similar to existing className DOM property, but don't have to manually split by spaces

The keyword this all JavaScript code actually runs inside of an object this.fieldName // access field this.fieldName = value; // modify field this.methodName(parameters); // call method JS all JavaScript code actually runs inside of an object by default, code runs in the global window object (so this === window) all global variables and functions you declare become part of window the this keyword refers to the current object

Event handler binding window.onload = function() { document.getElementById("textbox").onmouseout = booyah; document.getElementById("submit").onclick = booyah; }; // bound to submit button here function booyah() { // booyah knows what object it was called on this.value = "booyah"; } JS output event handlers attached unobtrusively are bound to the element inside the handler, that element becomes this

Removing a node from the page function slideClick() { var bullet = document.getElementById("removeme"); bullet.parentNode.removeChild(bullet); } JS odd idiom: obj.parentNode.remove(obj);

Types of DOM nodes element nodes (HTML tag) This is a paragraph of text with a <a href="/path/page.html">link in it</a>. </p> HTML element nodes (HTML tag) can have children and/or attributes text nodes (text in a block element) attribute nodes (attribute/value pair) text/attributes are children in an element node cannot have children or attributes not usually shown when drawing the DOM tree

Traversing the DOM tree manually every node's DOM object has the following properties: name(s) description firstChild, lastChild start/end of this node's list of children childNodes array of all this node's children nextSibling, previousSibling neighboring nodes with the same parent parentNode the element that contains this node complete list of DOM node properties browser incompatiblity information (IE6 sucks)

DOM tree traversal example <p id="foo">This is a paragraph of text with a <a href="/path/to/another/page.html">link</a>.</p> HTML

Element vs. text nodes Q: How many children does the div above have? <p> This is a paragraph of text with a <a href="page.html">link</a>. </p> </div> HTML Q: How many children does the div above have? A: 3 an element node representing the <p> two text nodes representing "\n\t" (before/after the paragraph) Q: How many children does the paragraph have? The a tag?