intro to javascript - eecs.yorku.cambrown/eecs1012/10-javascript-dom.pdf · global scope means a...

64
EECS1012 Net-centric Introduction to Computing M.S. Brown, EECS – York University 1 Lecture JavaScript DOM EECS 1012 Acknowledgements Contents are adapted from web lectures for “Web Programming Step by Step”, by M. Stepp, J. Miller, and V. Kirst. Slides have been ported to PPT by Dr. Xenia Mountrouidou. These slides have been edited for EECS1012, York University. The contents of these slides may be modified and redistributed, please give appropriate credit. (Creative Commons) Michael S. Brown, 2017.

Upload: lykien

Post on 14-Feb-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

EECS1012Net-centric Introduction

to Computing

M.S. Brown, EECS – York University 1

Lecture

JavaScript DOM

EECS 1012

Acknowledgements

Contents are adapted from web lectures for “Web Programming Step by Step”, by M. Stepp, J. Miller, and V. Kirst.

Slides have been ported to PPT by Dr. Xenia Mountrouidou.

These slides have been edited for EECS1012, York University.

The contents of these slides may be modified and redistributed, please give appropriate credit.

(Creative Commons) Michael S. Brown, 2017.

Page 2: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

A bit more on JavaScript2

Page 3: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Array length3

function myFunction {

var a = ["apple", "banana", "kiwi", "cherry", "orange"];

var len = a.length; // variable len will be 5

}

Like JS strings, arrays have a built in length

property we can access using the ".length" operator

In PHP, you needed to call the function

count($array) to get its size

Page 4: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Variable "scope"4

function myFunction {

var a = 10; /* these variables are only valid inside this

var b = 20; function. we say their scope is limited

var c = a * b; to this function. We call this local scope. */

}

function myFunction2 {

var a = 100; /* variable a here is a different a than the

the function above. Variable b and c are

undefined in this function. */

}

Variables can have two types of "scope".

Local scope means a variable is only available

inside a function

Global scope means a variable is available in all

functions (see next slide)

Page 5: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

JS code and global variables

JS code is run immediately when the file is loaded

Variables defined outside functions are consider

"Global" variables. These variables can be used by

any function. There values will be remembers

between function calls.

5

/* Code is run as soon as loaded – these variables are created */

var className = "EECS1012"; /* This is a global variable */

var intCounter = 0; /* This is another global variable */

function myFunction {

var Name = document.getElementbyId("Header1");

Name.innerHTML += className; /* className can be used in any function */

int Counter++; /* intCounter can be used here */

}

Page 6: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Loading multiple JS files

Like CSS, you can load multiple JS files in your

header

EECS1012

6

<!DOCTYPE html>

<html>

<head>

<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js"

type="text/javascript"></script>

<script src="example.js" type="text/javascript"></script>

</head>

<body>

. . .

</body>

</html>

This is a URL to a

JS file.

The second is

a local JS file.

Page 7: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Multiple JS functions

Your JS files can have multiple functions

EECS1012

7

function fun1() { /* function 1 and its code */

statements;

statements;

}

function fun2() { /* function2 and its code */

statements;

statements;

}

function fun3() { /* function3 and its code */

statements;

statements;

}

Page 8: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Global DOM objects8

Page 9: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Global DOM objects

Web browser provide six global objects that you

can access in your JavaScript code

These objects can be used to control the browsers

and get information about the current webpage

(and history)

EECS1012

9

Page 10: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

The six global DOM objects

name description

document current HTML page and its content

history list of pages the user has visited

location URL of the current HTML page

navigator info about the web browser you are using

screen info about the screen area occupied by the

browser

window the browser window

10

EECS 1012

In our class, we will mainly use the document object, however, it is good to

be aware of these other global objects. They are discussed briefly in the following slides.

Page 11: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

The location object

the URL of the current web page

properties:

host, hostname, href, pathname, port,

protocol, search

methods:

assign, reload, replace

EECS1012

11

EECS 1012

Page 12: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

The screen object

information about the client's display screen

properties:

availHeight, availWidth, colorDepth,

height, pixelDepth, width

EECS1012

12

EECS 1012

Page 13: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

The history object

the list of sites the browser has visited in this window

properties:

length

methods:

back, forward, go

sometimes the browser won't let scripts view

history properties, for security

EECS1012

13

EECS 1012

Page 14: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

The document object

the current web page and the elements inside it

properties:

anchors, body, cookie, domain, forms,

images, links, referrer, title, URL

useful methods:

getElementById()

getElementsByName()

getElementsByTagName()

EECS1012

14

EECS 1012

Page 15: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

The window object

the entire browser window; the top-level object in

DOM hierarchy

technically, all global code and variables become

part of the window object properties:

document, history, location, name

important method onload

This method is called when the entire HTML document has completed loading

15

Page 16: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Unobtrusive JavaScript16

Page 17: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Obtrusive event handlers

this is bad style (HTML is cluttered with JS code)

it requires the person writing the HTML code to

know the JS code in advance

GOAL: remove all JavaScript code from the HTML

body

17

// called when OK button is clicked

function okayClick() {

alert("booyah");

} JS

<button id="ok" onclick="okayClick();">OK</button>

HTMLWe directly link "onlick" to our

JS function "okayClick()".

This is considered "obtrusive".

Page 18: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Why unobtrusive JavaScript?

Why do we want unobtrusive JS Code?

allows separation of web site into 3 major

categories:

content (HTML) - what is it?

presentation (CSS) - how does it look?

behavior (JavaScript) - how does it respond to user

interaction?

EECS1012

18

EECS 1012

Page 19: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Attaching an event handler in

JavaScript code

it is possible to attach event handlers to elements'

DOM objects in your JavaScript code

notice that you do not put parentheses after the

function's name

this is better style than attaching them in the HTML

Where should we put the above code?

19

// where element is a DOM element object

element.event = function; JS

/* Example */

var button = document.getElementById("ok");

button.onclick = okayClick; /* <- LOOK: no() after func name*/

JS

Page 20: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Remember: When does JS code run?

your file's JS code runs the moment the browser

loads the script tag

any variables are declared immediately

any functions are declared but not called, unless your

global code explicitly calls them

20

// global code – start running as soon as it is linked

var x = 3;

function f(n) { return n + 1; }

function g(n) { return n - 1; }

x = f(x); JS

<head>

<script src="myfile.js" type="text/javascript"></script>

</head>

<body> ... </body> HTML

Page 21: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

When does my code run?

at this point in time, the browser has not yet read

your page's body

none of the DOM objects for tags on the page have

been created

EECS1012

21

EECS 1012

// global code – start running as soon as it is linked

var x = 3;

function f(n) { return n + 1; }

function g(n) { return n - 1; }

x = f(x); JS

<head>

<script src="myfile.js" type="text/javascript"></script>

</head>

<body> ... </body> HTML

Page 22: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

A failed attempt at being unobtrusive

problem: global JS code runs the moment the script is loaded

script in head is processed before page's body has loaded

no elements are available yet or can be accessed yet

via the DOM!!

22

// global code

var button = document.getDocumentbyId("ok");

button.onclick = okayClick;

JS

<head>

<script src="myfile.js" type="text/javascript"></script>

</head>

<body>

<div><button id="ok">OK</button></div> HTML

Page 23: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Solution: the window.onload event

we want to attach our event handlers right after the

page is done loading

there is a global event called window.onload event

that occurs at that moment

in window.onload handler we attach all the

other handlers to run when events occur

23

// this will run once the page has finished loading

function functionName() {

element.event = functionName1;

element.event = functionName2;

...

}

window.onload = functionName; // global code

JS

Page 24: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

An unobtrusive event handler

EECS1012

24

// called when page loads; sets up event handlers

function pageLoad() {

var button = document.getElementById("ok");

button.onclick = okayClick;

}

function okayClick() {

alert("booyah");

}

window.onload = pageLoad; // global code

JS

<!– look, no JavaScript! -->

<button id="ok">OK</button>

HTML

EECS 1012

In this example, we assign the event

"okayClick" using JS code, instead of

the HTML page. This is considered

unobtrusive.

Page 25: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Common unobtrusive JS errors

Remember, when we assign in the names of function,

don't use the (), only the function name.

25

window.onload = pageLoad(); /* remember - don't put the () */

window.onload = pageLoad;

okButton.onclick = okayClick();

okButton.onclick = okayClick;

JS

window.onLoad = pageLoad; /* <- the L is not capital */

window.onload = pageLoad;

JS

EECS1012EECS 1012

also, event names are all lowercase, not capitalized

like other variables

Page 26: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Anonymous functions

JavaScript allows you to declare anonymous

functions

quickly creates a function without giving it a name

can be stored as a variable, attached as an event

handler, etc.

26

/* look, no name! – we call this an anonymous function */

function() {

statements;

}

JS

EECS1012EECS 1012

Page 27: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Anonymous function example27

/* the example below is an anonymous function, notice

there is no name given to this function. However, the

function is only called once when the "window.onload" even

occurs, so it is OK we don't give it name */

window.onload = function() {

var okButton = document.getElementById("ok");

okButton.onclick = okayClick;

};

function okayClick() {

alert("booyah");

}

JS

EECS1012EECS 1012

We set window.onload = to

an anonymous function.

Page 28: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Revisit example from last lecture

EECS1012

28

<input id="num1" type="text" size="3"> +

<input id="num2" type="text" size="3"> =

<span id="answer"></span> <br>

<button onclick="compute();">Compute!</button>

function compute() {

var input1 = document.getElementById("num1");

var input2 = document.getElementById("num2");

var answer = document.getElementById("answer");

var result = input1.value + input2.value;

answer.innerHTML = result;

}

This example is considered

obtrusive, because we had to

define the onlick event in the

HTML. This means the HTML

page needs to know about the JS

file and function names, etc.

The HTML code below has an explicit link to "onclick" in it (i.e. obtrusive JS)

Page 29: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Unobtrusive version

EECS1012

29

<input id="num1" type="text" size="3"> +

<input id="num2" type="text" size="3"> =

<span id="answer"></span> <br>

<button id="compute">Compute!</button>

window.onload = pageLoad;

function pageLoad() {

var computeButton = document.getElementById("compute");

computeButton.onclick = compute;

}

function compute() {

var input1 = document.getElementById("num1");

var input2 = document.getElementById("num2");

var answer = document.getElementById("answer");

var result = input1.value + input2.value;

answer.innerHTML = result; }

This is unobtrusive, only

have to put an "id" for

this button. The onclick

event is linked from JS.

Page 30: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Version 2 – with anonymous function

EECS1012

30

<input id="num1" type="text" size="3"> +

<input id="num2" type="text" size="3"> =

<span id="answer"></span> <br>

<button id="compute">Compute!</button>

window.onload = function () {

var computeButton = document.getElementById("compute");

computeButton.onclick = compute;

}

function compute() {

var input1 = document.getElementById("num1");

var input2 = document.getElementById("num2");

var answer = document.getElementById("answer");

var result = input1.value + input2.value;

answer.innerHTML = result; }

This is unobtrusive, only

have to put an "id" for

this button. The onclick

event is linked from JS.

Here, the pageLoad()

function has been

replaced with

an anonymous function.

Page 31: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Recap – unobtrusive JS

Unobtrusive JS is general approach to JS

programming that tries to avoid having JS code

inside the HTML page

When possible, try to write JS code in an

unobtrusive manner

Use the "windows.onload" event to assign all the

event handlers

EECS1012

31

Page 32: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

The DOM tree32

Page 33: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

The document object model

The DOM models the HTML elements as a "tree"

structure

A tree is a type of data structure common in

computer science to organize data

Consider the next slide's HTML code

EECS1012

33

Page 34: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Consider the following HTML page34

<!DOCTYPE html><html><head><title> Page Title </title><meta name="description" content="A really great web site"><meta charset="UTF-8">

</head><body><h1> This is a heading </h1><p> A paragraph with a <a href=http://www.google.com/> link </a>.</p><ul>

<li>a list item</li><li>another item</li><li>a third item</li>

</ul></body></html>

Page 35: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

The DOM tree

EECS1012

35

EECS 1012

This is the "tree" representation

of the HTML page on the previous slide.

Page 36: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Tree terminology36

EECS 1012

Items in tree are called "nodes".

The nodes at the end of the tree

are called "leafs"

Like a family tree, we have

the notion of a "parent"

and "child" nodes. For

example, body is the parent

of h1, p, and ul.

h1, p, ul are child

nodes of body.

Page 37: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Types of DOM nodes

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 treeEECS1012

37

<p>

This is a paragraph of text with a

<a href="/path/page.html">link in it</a>.

</p> HTML

EECS 1012

Page 38: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Types of DOM nodes

EECS1012

38

<p>

This is a paragraph of text with a

<a href="/path/page.html">link in it</a>.

</p> HTML

EECS 1012

Consider the DOM of a node.

This is a "mini-tree" considering on the <p> element.

It has three direct children: (1) a text node,

(2) another element (link), and (3) another text node.

(1) (2) (3)

Page 39: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Traversing the DOM tree

name(s) description

firstChild, lastChildstart/end of this node's list of

children

*children array of all this node's children

nextSibling, previousSiblingneighboring nodes with the same

parent

parentNodethe element that contains this

node

EECS1012

39

EECS 1012

We will do an example with the *children property.

Page 40: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

DOM tree traversal example

EECS1012

40

<html>

<head>

<title> My page</title>

<meta charset="utf-8">

<script src="dom_example1.js" type="text/javascript"></script>

</head>

<body>

<h1>This is a Header</h1>

<div id="mydiv">

<p> First paragraph </p>

<p> Second paragraph </p>

<p> Third paragraph </p>

</div>

<button id="button"> Click </button>

</body>

</html>

Page 41: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

DOM tree traversal example41

EECS 1012

<p> First paragraph </p>

<p> 2nd paragraph </p>

<p> Third paragraph </p>

<body>

<div id="mydiv">

<h1> This is a header </h1>

<button>

Page 42: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

DOM tree traversal example

EECS1012

42

<p> First paragraph </p>

<p> 2nd paragraph </p>

<p> Third paragraph </p>

<body>

<div id="mydiv">

<h1> This is a header </h1>

<button>

html

body

h1

title meta

div

p p p

This is drawn without the "text" elements,

but each "p" has a text element that we

can access using "innerHTML".

DOM Tree

Page 43: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

DOM tree traversal example

EECS1012

43

function walk()

{

var divElement = document.getElementById("mydiv");

var childElements = divElement.children;

alert("mydiv element has " + childElements.length + " children");

for(var i=0; i < childElements.length; i++)

{

alert(childElements[i].innerHTML);

}

}

div

p p p

Gets the div

element

returns an

array with the

children of div

Loops through the

array and prints (using alert)

the innerHTML of the paragraph

Page 44: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Note: tree access

In the previous example, since we started withvar divElement = document.getElementById("mydiv");

Our access to the DOM tree starts at div.

As a result, we only had access to the

"descendants" of div, not the full

DOM tree

You will see this word "descendants" in JS

documentation

44

div

p p p

Page 45: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Selecting groups of DOM objects

methods in document and other DOM objects for

accessing descendants:

EECS1012

45

name description

getElementsByTagNamereturns array of descendants

with the given tag, such as "div"

getElementsByName

returns array of descendants

with the given name attribute

(mostly useful for accessing

form controls)

EECS 1012

Page 46: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Getting all elements of a certain type

EECS1012

46

// all Paras is an array of element objects

var allParas = document.getElementsByTagName("p");

// we loop trough all elements and change their background

// to "yellow"

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

EECS 1012

In tis example, we use the document object, so the

descendants are all elements in the HTML page with tag name "p".

This results

Page 47: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Previous code explained47

var allParas = document.getElementsByTagName("p");

[ , , ]

This will find all the DOM element objects that are <p> elements in the HTML page and return

them as an array. This array is assigned to the variable "allParas".

allParas = Paragraph

Object (0)

Paragraph

Object (1)

Paragraph

Object (2)

<body>

<p>This is the first paragraph</p>

<p>This is the second paragraph</p>

<p>You get the idea...</p>

</body> HTML

array index 0 1 2

Page 48: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Previous code explained48

allParas[i].style.backgroundColor = "yellow";

allParas

is an array

of element

objects.

allParas[i] access the ith

element in the array.

So, this statement is accessing a

single element object. The

element accessed depends on

the value of the variable i.

.style accesses the

style component

of the element

object.

.backgroundColor

accesses the backgroundColor

property of the style

component.

Paragraph

Object [i]

<body>

<p>This is the first paragraph</p>

<p>This is the second paragraph</p>

<p>You get the idea...</p>

</body>

Changes

the background

to yellow.

Page 49: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Combining with getElementById()

EECS1012

49

var addressDiv = document.getElementById("address");

var addrParas = addressDiv.getElementsByTagName("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

EECS 1012

In this example, only the paragraphs contained within "addressDiv" are

called. This is because "getElementsByTagName("p") is called from the

div element.

Page 50: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Creating and Deleting Elements50

EECS1012

Page 51: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Creating new nodes51

// create a new <h2> node

var newHeading = document.createElement("h2");

newHeading.innerHTML = "This is a heading";

newHeading.style.color = "green";

JS

merely creating a node does not add it to the page

you must add the new node as a child of an existing

element on the page...

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

Page 52: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Modifying the DOM tree52

var div = document.getElementById("mydiv");

var p = document.createElement("p");

p.innerHTML = "A paragraph!";

div.appendChild(p); /* append ads

JS

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

EECS 1012This would add a new paragraph to div with id=mydiv.

Page 53: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Example – adding items

EECS1012

53

<html>

<head>

<title> My page</title>

<meta charset="utf-8">

<script src="dom_example5.js" type="text/javascript"></script>

</head>

<body>

<p>To Do List</p>

<input type="text" id="textToAdd" size="20"><br>

<button id="button"> Click to Add Item</button>

<ol id="list">

</ol>

</body>

Page 54: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Example – adding items

EECS1012

54

window.onload = function() { /* This finds the button and sets the onclick function */

var button = document.getElementsByTagName("button");

button[0].onclick = insertItem;

}

function insertItem()

{

var todoList = document.getElementById("list"); /* get list element */

var textToAdd = document.getElementById("textToAdd"); /* get text input element */

if (textToAdd.value != "") /* if text input value isn't empty */

{

var newLi = document.createElement("li"); /* create a new li element */

newLi.innerHTML = textToAdd.value; /* set the innerHTML to the text input value */

todoList.appendChild(newLi); /* add this to the DOM tree */

/* by appending to the list object */

}

}

Page 55: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Example – delete items

EECS1012

55

<html>

<head>

<title> My page</title>

<meta charset="utf-8">

<script src="dom_example4.js" type="text/javascript"></script>

</head>

<body>

<p>To Do List</p>

<button id="button"> Click Remove Item</button>

<ol id="mylist">

<li> Study EECS1012 </li>

<li> Call mom </li>

<li> Pay rent </li>

<li> Return library book </li>

</ol>

</body>

Page 56: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Example – deleting items

EECS1012

56

window.onload = function() { /* attaches the deleteListItem function to the button */

var button = document.getElementsByTagName("button");

button[0].onclick = deleteListItem;

}

function deleteListItem()

{

var mylist = document.getElementById("mylist"); /* get list element */

var pars = mylist.getElementsByTagName("li"); /* get all li elements in the list element */

if (pars.length > 0) /* pars (array of li elements) is not 0 */

{

mylist.removeChild(pars[0]); /* remove the first li element from the */

} /* list element */

}

Page 57: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Prototype Library57

Page 58: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Problem with JavasScript

EECS1012

58

JavaScript is a powerful language, but it has many

flaws

DOM can be clunky to use

the same code doesn't work the same way on some

browsers

as a result, some developers have created a

"library" (set of JS functions) call the "Prototype"

library

Page 59: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Prototype Library59

<script src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js"type="text/javascript"></script>

Prototype JS library adds many useful features to

JS

Makes DOM easier to use

improves event-driven programming

works the same across many browsers

To use the Prototype library, link to it as shown

above

Note this access the JS file as a URL

Page 60: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Prototype framework

the Prototype JavaScript library adds many useful

features to JavaScript:

many useful extensions to the DOM

added methods to String, Array, Date, Number, Object

improves event-driven programming

many cross-browser compatibility fixes

makes Ajax programming easier (seen later)

<script src="

https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/pr

ototype.js "

type="text/javascript"></script> JS

EECS1012

60

EECS 1012

Page 61: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

The $ function

returns the DOM object representing the element

with the given id

short for document.getElementById("id")

often used to write more concise DOM code:

EECS1012

61

$("id") JS

$("footer").innerHTML = $("username").value;

JS

EECS 1012

Page 62: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Example with prototype

EECS1012

62

<html>

<head>

<script src=" https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js "

type="text/javascript"></script>

<script src="dom_example6.js" type="text/javascript"></script>

</head>

<body>

<h1>The Amazing Adder</h1>

<div>

<input id="num1" type="text" size="3"> +

<input id="num2" type="text" size="3"> =

<span id="answer"></span> <br>

<button onclick="compute();">Compute!</button>

</div>

</body>

</html>

function compute() {

var num1 = $("num1").value;

var num2 = $("num2").value;

$("answer").innerHTML = parseInt( num1 ) + parseInt( num2 );

}

dom_example6.html

dom_example6.js

Page 63: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Prototype

EECS1012

63

function compute() {

var num1 = $("num1").value;

var num2 = $("num2").value;

$("answer").innerHTML = parseInt( num1 ) + parseInt( num2 );

}

<input id="num1" type="text" size="3"> +

<input id="num2" type="text" size="3"> =

<span id="answer"></span> <br>

<button onclick="compute();">Compute!</button>

HTML – (note: this example is obtrusive HTML . . but the purpose of this

example is to who the prototype library in JS)

Using the $("element_id") we have

much more compact JS code. It is

also easier to make the connection

back to the HTML page.

$("id") is equivalent to calling document.getElementbyId("id").

Page 64: Intro to Javascript - eecs.yorku.cambrown/EECS1012/10-Javascript-DOM.pdf · Global scope means a variable is available in all functions (see next slide) ... (JavaScript) - how does

Recap

The DOM gives JS access to the underlying

webpage

The DOM tree is used to describe the HTML page

This gives us the ability to modify, create, and

delete elements in the tree (i.e. HTML page)

The prototype library makes accessing document

elements "cleaner"

We will use the prototype library more in the next

lecture on "events".

EECS1012

64