SlideShare a Scribd company logo
Chapter 4
Browsers and the DOM
CSI 3140
WWW Structures, Techniques and Standards
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 2
Overview
The Document Object Model (DOM) is an API that
allows programs to interact with HTML (or XML)
documents

In typical browsers, the JavaScript version of the API is
provided via the document host object

W3C recommendations define standard DOM
Several other browser host objects are informal, de
facto standards
alert, prompt are examples
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 3
DOM Introduction
Example: “Rollover” effect
Cursor not over image Image changes when cursor
moves over
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 4
DOM Introduction
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 5
DOM Introduction
Import
JavaScript
code
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 6
DOM Introduction
Default language for scripts specified as attribute values
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 7
DOM Introduction
Calls to JavaScript
show() function when
mouse moves over/away
from image
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 8
DOM Introduction
Notice that id of image is first argument to show()
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 9
DOM Introduction
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 10
DOM Introduction
DOM method returning Object
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 11
DOM Introduction
Returns instance
of Element
(DOM-defined
host object)
representing
HTML element
with given id
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 12
DOM Introduction
Some properties of
Element instance
correspond
to attributes of
HTML element
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 13
DOM Introduction
Method inherited by Element instances
for setting value of an attribute
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 14
DOM Introduction
Effect: src attribute of HTML element with
specified eltId is changed to specified URL
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 15
DOM Introduction
Image src changed to
CFP22.png when mouse
is over image,
CFP2.png when leaves
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 16
DOM History and Levels
Very simple DOM was part of Netscape 2.0
Starting with Netscape 4.0 and IE 4.0,
browser DOM API’s diverged significantly
W3C responded quickly with DOM Level 1
(Oct 1998) and subsequently DOM Level 2
We cover JavaScript API for DOM2 + some
coverage of browser specifics
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 17
Intrinsic Event Handling
An event is an occurrence of something
potentially interesting to a script:
 Ex: mouseover and mouseout events
An HTML intrinsic event attribute is used
to specify a script to be called when an event
occurs
 Ex: onmouseover
 Name of attribute is on followed by event name
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 18
Intrinsic Event Handling
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 19
Intrinsic Event Handling
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 20
Intrinsic Event Handling
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 21
Intrinsic Event Handling
Intrinsic event attribute value is a script;
what language is it written in?
HTTP Content-Script-Type header field
specifies default scripting language
meta element allows document to specify
values as if they were header fields
Header field name Header field value
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 22
Modifying Element Style
Change
background color
of element
containing cursor
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 23
Modifying Element Style
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 24
Modifying Element Style
Like rollover, style needs to be modified
both when entering and exiting the element.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 25
Modifying Element Style
Reference to Element instance
representing the td element
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 26
Modifying Element Style
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 27
Modifying Element Style
Reference to Element instance
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 28
Modifying Element Style
All Element instances have a style property
with an Object value
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 29
Modifying Element Style
Properties of style object
correspond to CSS style properties of
the corresponding HTML element.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 30
Modifying Element Style
Rules for forming style property names from
names of CSS style properties:
 If the CSS property name contains no hyphens, then
the style object’s property name is the same
 Ex: color color
 Otherwise, all hyphens are removed and the letters
that immediately followed hyphens are capitalized
 Ex: background-color backgroundColor
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 31
Modifying Element Style
Net effect: “silver” becomes the specified value for
CSS background-color property of td element;
browser immediately modifies the window.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 32
Modifying Element Style
Alternative syntax (not supported in IE6):
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 33
Modifying Element Style
Alternate syntax (not supported in IE6):
Every DOM2-compliant style object
has a setProperty() method
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 34
Modifying Element Style
Alternate syntax (not supported in IE6):
CSS property
name
(unmodified)
CSS property
value
Empty string
or
“important”
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 35
Modifying Element Style
Advantages of setProperty() syntax:
 Makes it clear that a CSS property is being set
rather than merely a property of the style
object
 Allows CSS property names to be used as-is
rather than requiring modification (which can
potentially cause confusion)
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 36
Modifying Element Style
Obtaining specified CSS property value:
Alternate DOM2 syntax (not supported by
IE6):
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 37
Document Tree
Recall that HTML document elements form
a tree structure, e.g.,
DOM allows scripts to access and modify
the document tree
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 38
Document Tree: Node
There are many types of nodes in the DOM
document tree, representing elements, text,
comments, the document type declaration, etc.
Every Object in the DOM document tree
has properties and methods defined by the
Node host object
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 39
Document Tree: Node
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 40
Document Tree: Node
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 41
Document Tree: Node
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 42
Document Tree: Node
Example HTML document
Function we will write that will
use Node methods and properties
to produce string representing
Element tree
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 43
Document Tree: Node
String produced by TreeOutline():
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 44
Document Tree: Node
Example: “walking” the tree of an HTML
document
 Reference to html element is contained in
documentElement property of document
object
 Use Node-defined methods to recursively create
an outline of nodeName’s:
Depth in tree
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 45
Document Tree: Node
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 46
Document Tree: Node
Contains nodeType value representing Element
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 47
Document Tree: Node
Ignore non-Element’s
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 48
Document Tree: Node
Add nodeName to string
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 49
Document Tree: Node
Recurse on
child nodes
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 50
Document Tree: Node
For Element’s, nodeName is type of the
element (p, img, etc.)
Case: Name will be lower case if browser
recognizes document as XHTML, upper case
otherwise

Can guarantee case by using String instance
toLowerCase() / toUpperCase() methods
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 51
Document Tree: Node
Convention: write code as if browser is
DOM-compliant, work around non-
compliance as needed
In a DOM-compliant browser, we would use
this symbolic constant rather than the constant 1.
Problem: IE6 does not define ELEMENT_NODE
property (or Node object).
Solution: Use symbolic constant if available,
fall back to numeric constant if necessary.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 52
Document Tree: Node
Convention: write code as if browser is
DOM-compliant, work around non-
compliance as needed
This expression is automatically cast to Boolean.
IE6: no Node global, so evaluates to false
DOM-compliant: Node is an Object, so evaluates
to true
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 53
Document Tree: Modification
Initial rendering After user clicks first list item
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 54
Document Tree: Modification
Find the
li Element
following the
selected one
(if it exists)
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 55
Document Tree: Modification
Returns null if
no next sibling
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 56
Document Tree: Modification
Converting
null to Boolean
produces false
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 57
Document Tree: Modification
Swap nodes
if an li
element
follows
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 58
Document Tree: Modification
Operate on a node by calling methods
on its parent
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 59
Document Tree: Modification
Remove following element from tree
Re-insert element earlier in tree
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 60
Document Tree: document
The document object is also considered a
Node object
Technically, document is the root Node of
the DOM tree
 html Element object is a child of document
 Other children may also include document type
declaration, comments, text elements (white space)
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 61
Document Tree: document
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 62
Document Tree: document
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 63
Document Tree: Element Nodes
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 64
Document Tree: Text Nodes
data property represents character data of a Text
node
 Modifying the property modifies the corresponding text in
the browser
By default, the DOM tree may contain sibling Text
nodes
 Example: © 2007 might be split into two Text
nodes, one with copyright character
 Call normalize() method on an ancestor node to
prevent this
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 65
Document Tree: Adding Nodes
<body onload="makeCollapsible('collapse1');">
<ol id="collapse1">
<li>First element of ordered list.</li>
<li>Second element.</li>
<li>Third element.</li>
</ol>
<p>
Paragraph following the list (does not collapse).
</p>
</body>
Body of original HTML document:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 66
Document Tree: Adding Nodes
<body onload="makeCollapsible('collapse1');">
<ol id="collapse1">
<li>First element of ordered list.</li>
<li>Second element.</li>
<li>Third element.</li>
</ol>
<p>
Paragraph following the list (does not collapse).
</p>
</body> Effect of executing makeCollapsible():
Added
to DOM
tree:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 67
Document Tree: Adding Nodes
Added element
is displayed as if
it was part of
the HTML source
document
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 68
Document Tree: Adding Nodes
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 69
Document Tree: Adding Nodes
Node
creation
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 70
Document Tree: Adding Nodes
Node
addition to DOM
tree (rec. doing
this immediately
after creation).
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 71
Document Tree: Adding Nodes
Attribute
addition
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 72
Document Tree: Adding Nodes
Before clicking button: After clicking button:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 73
Document Tree: Adding Nodes
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 74
Document Tree: Adding Nodes
Modifying text.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 75
Document Tree: HTML Properties
Attribute values can be set two ways:
As with CSS properties, former has some
advantages:
 Makes clear that setting an HTML attribute, not merely
a property of an object
 Avoids certain special cases, e.g.
element.setAttribute(“class”, “warning”); //DOM
element.className = “warning”; //req’d in IE6
class is reserved word in JavaScript
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 76
DOM Event Handling
Note: IE6 has a different event model
Event instance created for each event
Event instance properties:
 type: name of event (click, mouseover, etc.)
 target: Node corresponding to document element
that generated the event (e.g., button element for
click, img for mouseover). This is the event target.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 77
DOM Event Handling
JavaScript event listener: function that is
called with Event instance when a certain
event occurs
An event listener is associated with a target
element by calling addEventListener()
on the element
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 78
DOM Event Handling
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 79
DOM Event Handling
Event
target
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 80
DOM Event Handling
Event type
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 81
DOM Event Handling
DOM event types:
 All HTML intrinsic events except keypress,
keydown, keyup, and dblclick
 Also has some others that are typically targeted
at the window object:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 82
DOM Event Handling
Event handler
Definition
of event
handler
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 83
DOM Event Handling
Event instance
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 84
DOM Event Handling
Normally false
(more later)
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 85
DOM Event Handling
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 86
DOM Event Handling:
Mouse Events
DOM2 mouse events
 click
 mousedown
 mouseup
 mousemove
 mouseover
 mouseout
Event instances have additional properties for
mouse events
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 87
DOM Event Handling:
Mouse Events
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 88
DOM Event Handling:
Mouse Events
Example: mouse “trail”
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 89
DOM Event Handling:
Mouse Events
HTML document:
JavaScript init() function:
Create
“blips”
Add event
listener
String uniquely
identifying this div
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 90
DOM Event Handling:
Mouse Events
Style sheet for “blips”:
Initially, not displayed
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 91
DOM Event Handling:
Mouse Events
Event handler updateDivs():
Convert mouse location
from Number to String
and append units
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 92
DOM Event Handling:
Mouse Events
Event handler updateDivs():
Mod (remainder) operator
used to cycle through “blip” divs
(least-recently changed is the
next div moved)
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 93
DOM Event Propagation
Target of event is lowest-level element
associated with event
 Ex: target is the a element if the link is clicked:
<td><a href=…>click</a></td>
However, event listeners associated with
ancestors of the target may also be called
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 94
DOM Event Propagation
Three types of event listeners:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 95
DOM Event Propagation
Three types of event listeners:
Capturing: Listener on ancestor created with true as third arg.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 96
DOM Event Propagation
Three types of event listeners:
Target: Listener on target element
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 97
DOM Event Propagation
Three types of event listeners:
Bubbling: Listener on ancestor created with false as third arg.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 98
DOM Event Propagation
Priority of event handlers:
body
ol
li
a
1. Capturing event
handlers; ancestors
closest to root
have highest
priority
Target
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 99
DOM Event Propagation
Priority of event handlers:
body
ol
li
a
2. Target event handlers
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 100
DOM Event Propagation
Priority of event handlers:
body
ol
li
a
3. Bubbling event
handlers; ancestors
closest to target have
priority.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 101
DOM Event Propagation
Certain events do not bubble, e.g.,
 load
 unload
 focus
 blur
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 102
DOM Event Propagation
Propagation-related properties of Event
instances:
 eventPhase: represents event processing phase:
 1: capturing
 2: target
 3: bubbling
 currentTarget: object (ancestor or target)
associated with this event handler
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 103
DOM Event Propagation
Propagation-related method of Event instances:
 stopPropagation(): lower priority event handlers
will not be called
Typical design:

Use bubbling event handlers to provide default
processing (may be stopped)

Use capturing event handlers to provide required
processing (e.g., cursor trail)
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 104
Example: Drop-down Menus
When cursor
moves over
upper menu
…
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 105
Example: Drop-down Menus
…
a drop-down
appears
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 106
Example: Drop-down Menus
Background color changes
as cursor moves over
drop-down items
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 107
Example: Drop-down Menus
Drop-down
disappears
when cursor
leaves both
drop-down
and menu
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 108
Example: Drop-down Menus
Document structure:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 109
Example: Drop-down Menus
Document structure: Event handlers will be added by
JavaScript code
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 110
Example: Drop-down Menus
Document structure:
Top menu
is a table
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 111
Example: Drop-down Menus
Document structure:
Each top
menu item is
a (positioned)
div
CSS:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 112
Example: Drop-down Menus
Document structure:
Associated
drop-down is
in a div
that is
out of the normal
flow and initially
invisible
CSS:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 113
Example: Drop-down Menus
Document structure:
Associated
drop-down is
a table
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 114
Example: Drop-down Menus
Full style rules:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 115
Example: Drop-down Menus
Full style rules:
Top menu item div
is “positioned” but
not moved from normal
flow location
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 116
Example: Drop-down Menus
Full style rules:
Upper left corner of
drop-down div overlaps
bottom border of top
menu
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 117
Example: Drop-down Menus
Full style rules:
Drop-down drawn over
lower z-index elements
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 118
Example: Drop-down Menus
Adding event handlers to top menu:
 Document:
 JavaScript addEventHandlers():
Target
event
handlers
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 119
Example: Drop-down Menus
Adding event handlers to top menu:
 Document:
 JavaScript addEventListener():
menuBar1 will be target of events; adding reference to the drop-down
div makes it easy for event handler to access the drop-down
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 120
Example: Drop-down Menus
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 121
Example: Drop-down Menus
Basic
processing:
change
visibility of
drop-down
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 122
Example: Drop-down Menus
Ignore
bubbling
mouseover
events from
drop-down
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 123
Example: Drop-down Menus
Ignore
mouseout
event if
cursor is
remaining
over menu
item or
drop-down
(self or
descendant)
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 124
Example: Drop-down Menus
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 125
Example: Drop-down Menus
Adding event handlers to drop-down:
 Document:
 JavaScript addEventListener():
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 126
Example: Drop-down Menus
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 127
Example: Drop-down Menus
Don’t
bother
changing
style if
this event
bubbled
from a
descendant.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 128
Example: Drop-down Menus
Don’t bubble up to showDropDown since
the drop-down must be visible
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 129
Example: Drop-down Menus
Ignore
mouseout to
a descendant
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 130
DOM Event Cancellation
Browser provides default event listener for certain
elements and events
 Ex: click on hyperlink
 Ex: click on submit button
Default listeners are called after all user-specified
listeners
stopPropagation() does not affect default
listeners
Instead, call preventDefault() on Event instance
to cancel default event handling
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 131
DOM Form Validation
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 132
DOM Form Validation
<body onload="addListeners();">
<form id="validatedForm" action="http://www.example.com">
<p>
<label>Required input:
<input type="text"
name="requiredField" id="requiredField" />
</label>
<input type="submit"
name="submit" value="Click to submit" />
</p>
</form>
</body>
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 133
DOM Form Validation
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 134
DOM Form Validation
Listen for form to be submitted
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 135
DOM Form Validation
Must use value property to access
value entered in text field on form
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 136
DOM Form Validation
Regular expression literal representing
“set of strings consisting only of white space”
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 137
DOM Form Validation
Cancel browser’s default submit event processing
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 138
DOM Event Generation
Several Element’s provide methods for
generating events
 Ex: causes text in text field to be
selected and a select event to occur
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 139
Detecting Host Objects
How can a JavaScript program test for the
existence of a certain host object?
 Does the style element have a
setProperty() method?
 If we’re also not sure that element is defined
or that style exists:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 140
Detecting Host Objects
Is a browser DOM-compliant?
 Ex: document.implementation(“Core”,
“2.0”) returns true if browser implements all of
DOM 2 Core module, false otherwise
 Problem: what does false tell you?
Many scripts attempt to directly determine the
browser, but…
 What about new browsers?
 Some browsers can “lie” about what they are
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 141
IE6 and the DOM
There are a number of non compliance to
the DOM specification in IE6.
We do not cover these in class, but you are
encouraged to read the book and the coming
slides in details, as this problem is very
representative of web programmer’s real life.
Dealing with these issues is part of the trade!
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 142
IE6 and the DOM
No Node object (and associated constants)
No setProperty() or
getPropertyValue()
Must use “className” rather than
“class” in setAttribute() and
getAttribute()
Empty div/span height cannot be made
less than character height
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 143
IE6 and the DOM
No addEventListener() (so no
multiple listeners)
Cannot use setAttribute() to specify
intrinsic event attribute
 DOM:
 IE6:
Value assigned is a function Object (method)
rather than a String.
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 144
IE6 and the DOM
Adding listeners to both IE6 and DOM:
String-valued in DOM, initially null in IE6
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 145
IE6 and the DOM
Passing arguments to event listeners:
 DOM:
 IE6:
Listener is called as a method
in IE6, so this is a reference
to button
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 146
IE6 and the DOM
Passing arguments to event listeners:
DOM
approach
Test that arguments are defined
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 147
IE6 and the DOM
Passing arguments to event listeners:
IE6
approach
Test for host object created by IE6 when event occurs
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 148
IE6 and the DOM
Passing arguments to event listeners:
IE6
approach
DOM
approach
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 149
IE6 and the DOM
Passing arguments to event listeners:
IE6
approach
DOM
approach
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 150
IE6 and the DOM
IE6 does not pass an Event instance to
event listeners
Instead, IE6 creates a global object event
when an (intrinsic) event occurs
Testing for non-DOM call: In a DOM-compliant
call to event listener
there is one
argument that is
an Event instance
Basically an Array
of call arguments
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 151
IE6 and the DOM
Converting event object to Event-like:
Undefined if IE6
Global object
created by IE6
In IE6, evaluates to Object
value of DOM’s Event
currentTarget property
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 152
IE6 and the DOM
Converting event object to Event-like:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 153
IE6 and the DOM
Converting event object to Event-like:
Use
exception
handling
for convenience
rather than
testing
for existence
of properties
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 154
IE6 and the DOM
Converting event object to Event-like:
Most type
values
(except
dblclick)
are copied
without
change
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 155
IE6 and the DOM
Converting event object to Event-like:
IE6 uses
a different
name for
target
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 156
IE6 and the DOM
Converting event object to Event-like:
currentTarget passed in from event listener:
within eventConvert(), this refers to the global object!
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 157
IE6 and the DOM
Converting event object to Event-like:
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 158
IE6 and the DOM
Converting event object to Event-like:
Use function expressions to define DOM methods as setting IE properties
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 159
IE6 and the DOM
Converting event object to Event-like:
Most mouse-event
properties are identical
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 160
IE6 and the DOM
Converting event object to Event-like:
Buttons are numbered
differently
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 161
IE6 and the DOM
Converting event object to Event-like:
Different names for
relatedTarget
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 162
IE6 and the DOM
Converting event object to Event-like:
 Capturing listeners behave somewhat differently
in IE6 and DOM, so eventConvert() did
not attempt to simulate the eventPhase DOM
property
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 163
Other Common Host Objects
Browsers also provide many non-DOM
host objects as properties of window
While no formal standard defines these
objects, many host objects are very similar in
IE6 and Mozilla
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 164
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 165
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 166
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 167
Other Common Host Objects
open() creates a pop-up window
 Each window has its own global object, host
objects, etc.
 Use pop-ups with care:
 Pop-ups may be blocked by the browser
 They can annoy and/or confuse users
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 168
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 169
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 170
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 171
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 172
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 173
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 174
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 175
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 176
Other Common Host Objects
Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 177
Other Common Host Objects
navigator: (unreliable) information about browser,
including String-valued properties:

appName

appVersion
 userAgent
screen: information about physical device, including
Number properties:

availHeight, availWidth: effective screen size (pixels)

colorDepth: bits per pixel

More Related Content

PPT
PPT
POLITEKNIK MALAYSIA
PPT
PPT
CSS Basics ro advanced training material
PPT
POLITEKNIK MALAYSIA
CSS Basics ro advanced training material

Similar to Document object model - web technology - chapter 3 (8)

PPT
Css Founder.com | Cssfounder net
PPT
Css Founder.com| Cssfounder Net
PPT
Server side
PPT
DOMhjuuihjinmkjiiuhuygfrtdxsezwasgfddggh
PPT
different Markup Languages like html xhtml
PPTX
Web programming
PPTX
Semantic Web - Search engines
PPT
Embedded Metadata: Share, Deliver, Preserve
Css Founder.com | Cssfounder net
Css Founder.com| Cssfounder Net
Server side
DOMhjuuihjinmkjiiuhuygfrtdxsezwasgfddggh
different Markup Languages like html xhtml
Web programming
Semantic Web - Search engines
Embedded Metadata: Share, Deliver, Preserve
Ad

Recently uploaded (20)

PDF
top salesforce developer skills in 2025.pdf
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PPTX
Computer Software and OS of computer science of grade 11.pptx
PPT
Introduction Database Management System for Course Database
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Digital Strategies for Manufacturing Companies
PPTX
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
PPTX
CHAPTER 2 - PM Management and IT Context
PPTX
ai tools demonstartion for schools and inter college
PPTX
history of c programming in notes for students .pptx
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
Design an Analysis of Algorithms II-SECS-1021-03
top salesforce developer skills in 2025.pdf
Wondershare Filmora 15 Crack With Activation Key [2025
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
Upgrade and Innovation Strategies for SAP ERP Customers
VVF-Customer-Presentation2025-Ver1.9.pptx
Computer Software and OS of computer science of grade 11.pptx
Introduction Database Management System for Course Database
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Digital Strategies for Manufacturing Companies
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
CHAPTER 2 - PM Management and IT Context
ai tools demonstartion for schools and inter college
history of c programming in notes for students .pptx
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Navsoft: AI-Powered Business Solutions & Custom Software Development
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Which alternative to Crystal Reports is best for small or large businesses.pdf
Design an Analysis of Algorithms II-SECS-1021-03
Ad

Document object model - web technology - chapter 3

  • 1. Chapter 4 Browsers and the DOM CSI 3140 WWW Structures, Techniques and Standards
  • 2. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 2 Overview The Document Object Model (DOM) is an API that allows programs to interact with HTML (or XML) documents  In typical browsers, the JavaScript version of the API is provided via the document host object  W3C recommendations define standard DOM Several other browser host objects are informal, de facto standards alert, prompt are examples
  • 3. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 3 DOM Introduction Example: “Rollover” effect Cursor not over image Image changes when cursor moves over
  • 4. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 4 DOM Introduction
  • 5. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 5 DOM Introduction Import JavaScript code
  • 6. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 6 DOM Introduction Default language for scripts specified as attribute values
  • 7. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 7 DOM Introduction Calls to JavaScript show() function when mouse moves over/away from image
  • 8. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 8 DOM Introduction Notice that id of image is first argument to show()
  • 9. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 9 DOM Introduction
  • 10. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 10 DOM Introduction DOM method returning Object
  • 11. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 11 DOM Introduction Returns instance of Element (DOM-defined host object) representing HTML element with given id
  • 12. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 12 DOM Introduction Some properties of Element instance correspond to attributes of HTML element
  • 13. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 13 DOM Introduction Method inherited by Element instances for setting value of an attribute
  • 14. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 14 DOM Introduction Effect: src attribute of HTML element with specified eltId is changed to specified URL
  • 15. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 15 DOM Introduction Image src changed to CFP22.png when mouse is over image, CFP2.png when leaves
  • 16. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 16 DOM History and Levels Very simple DOM was part of Netscape 2.0 Starting with Netscape 4.0 and IE 4.0, browser DOM API’s diverged significantly W3C responded quickly with DOM Level 1 (Oct 1998) and subsequently DOM Level 2 We cover JavaScript API for DOM2 + some coverage of browser specifics
  • 17. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 17 Intrinsic Event Handling An event is an occurrence of something potentially interesting to a script:  Ex: mouseover and mouseout events An HTML intrinsic event attribute is used to specify a script to be called when an event occurs  Ex: onmouseover  Name of attribute is on followed by event name
  • 18. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 18 Intrinsic Event Handling
  • 19. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 19 Intrinsic Event Handling
  • 20. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 20 Intrinsic Event Handling
  • 21. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 21 Intrinsic Event Handling Intrinsic event attribute value is a script; what language is it written in? HTTP Content-Script-Type header field specifies default scripting language meta element allows document to specify values as if they were header fields Header field name Header field value
  • 22. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 22 Modifying Element Style Change background color of element containing cursor
  • 23. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 23 Modifying Element Style
  • 24. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 24 Modifying Element Style Like rollover, style needs to be modified both when entering and exiting the element.
  • 25. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 25 Modifying Element Style Reference to Element instance representing the td element
  • 26. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 26 Modifying Element Style
  • 27. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 27 Modifying Element Style Reference to Element instance
  • 28. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 28 Modifying Element Style All Element instances have a style property with an Object value
  • 29. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 29 Modifying Element Style Properties of style object correspond to CSS style properties of the corresponding HTML element.
  • 30. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 30 Modifying Element Style Rules for forming style property names from names of CSS style properties:  If the CSS property name contains no hyphens, then the style object’s property name is the same  Ex: color color  Otherwise, all hyphens are removed and the letters that immediately followed hyphens are capitalized  Ex: background-color backgroundColor
  • 31. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 31 Modifying Element Style Net effect: “silver” becomes the specified value for CSS background-color property of td element; browser immediately modifies the window.
  • 32. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 32 Modifying Element Style Alternative syntax (not supported in IE6):
  • 33. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 33 Modifying Element Style Alternate syntax (not supported in IE6): Every DOM2-compliant style object has a setProperty() method
  • 34. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 34 Modifying Element Style Alternate syntax (not supported in IE6): CSS property name (unmodified) CSS property value Empty string or “important”
  • 35. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 35 Modifying Element Style Advantages of setProperty() syntax:  Makes it clear that a CSS property is being set rather than merely a property of the style object  Allows CSS property names to be used as-is rather than requiring modification (which can potentially cause confusion)
  • 36. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 36 Modifying Element Style Obtaining specified CSS property value: Alternate DOM2 syntax (not supported by IE6):
  • 37. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 37 Document Tree Recall that HTML document elements form a tree structure, e.g., DOM allows scripts to access and modify the document tree
  • 38. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 38 Document Tree: Node There are many types of nodes in the DOM document tree, representing elements, text, comments, the document type declaration, etc. Every Object in the DOM document tree has properties and methods defined by the Node host object
  • 39. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 39 Document Tree: Node
  • 40. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 40 Document Tree: Node
  • 41. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 41 Document Tree: Node
  • 42. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 42 Document Tree: Node Example HTML document Function we will write that will use Node methods and properties to produce string representing Element tree
  • 43. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 43 Document Tree: Node String produced by TreeOutline():
  • 44. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 44 Document Tree: Node Example: “walking” the tree of an HTML document  Reference to html element is contained in documentElement property of document object  Use Node-defined methods to recursively create an outline of nodeName’s: Depth in tree
  • 45. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 45 Document Tree: Node
  • 46. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 46 Document Tree: Node Contains nodeType value representing Element
  • 47. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 47 Document Tree: Node Ignore non-Element’s
  • 48. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 48 Document Tree: Node Add nodeName to string
  • 49. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 49 Document Tree: Node Recurse on child nodes
  • 50. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 50 Document Tree: Node For Element’s, nodeName is type of the element (p, img, etc.) Case: Name will be lower case if browser recognizes document as XHTML, upper case otherwise  Can guarantee case by using String instance toLowerCase() / toUpperCase() methods
  • 51. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 51 Document Tree: Node Convention: write code as if browser is DOM-compliant, work around non- compliance as needed In a DOM-compliant browser, we would use this symbolic constant rather than the constant 1. Problem: IE6 does not define ELEMENT_NODE property (or Node object). Solution: Use symbolic constant if available, fall back to numeric constant if necessary.
  • 52. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 52 Document Tree: Node Convention: write code as if browser is DOM-compliant, work around non- compliance as needed This expression is automatically cast to Boolean. IE6: no Node global, so evaluates to false DOM-compliant: Node is an Object, so evaluates to true
  • 53. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 53 Document Tree: Modification Initial rendering After user clicks first list item
  • 54. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 54 Document Tree: Modification Find the li Element following the selected one (if it exists)
  • 55. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 55 Document Tree: Modification Returns null if no next sibling
  • 56. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 56 Document Tree: Modification Converting null to Boolean produces false
  • 57. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 57 Document Tree: Modification Swap nodes if an li element follows
  • 58. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 58 Document Tree: Modification Operate on a node by calling methods on its parent
  • 59. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 59 Document Tree: Modification Remove following element from tree Re-insert element earlier in tree
  • 60. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 60 Document Tree: document The document object is also considered a Node object Technically, document is the root Node of the DOM tree  html Element object is a child of document  Other children may also include document type declaration, comments, text elements (white space)
  • 61. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 61 Document Tree: document
  • 62. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 62 Document Tree: document
  • 63. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 63 Document Tree: Element Nodes
  • 64. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 64 Document Tree: Text Nodes data property represents character data of a Text node  Modifying the property modifies the corresponding text in the browser By default, the DOM tree may contain sibling Text nodes  Example: &copy; 2007 might be split into two Text nodes, one with copyright character  Call normalize() method on an ancestor node to prevent this
  • 65. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 65 Document Tree: Adding Nodes <body onload="makeCollapsible('collapse1');"> <ol id="collapse1"> <li>First element of ordered list.</li> <li>Second element.</li> <li>Third element.</li> </ol> <p> Paragraph following the list (does not collapse). </p> </body> Body of original HTML document:
  • 66. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 66 Document Tree: Adding Nodes <body onload="makeCollapsible('collapse1');"> <ol id="collapse1"> <li>First element of ordered list.</li> <li>Second element.</li> <li>Third element.</li> </ol> <p> Paragraph following the list (does not collapse). </p> </body> Effect of executing makeCollapsible(): Added to DOM tree:
  • 67. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 67 Document Tree: Adding Nodes Added element is displayed as if it was part of the HTML source document
  • 68. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 68 Document Tree: Adding Nodes
  • 69. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 69 Document Tree: Adding Nodes Node creation
  • 70. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 70 Document Tree: Adding Nodes Node addition to DOM tree (rec. doing this immediately after creation).
  • 71. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 71 Document Tree: Adding Nodes Attribute addition
  • 72. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 72 Document Tree: Adding Nodes Before clicking button: After clicking button:
  • 73. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 73 Document Tree: Adding Nodes
  • 74. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 74 Document Tree: Adding Nodes Modifying text.
  • 75. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 75 Document Tree: HTML Properties Attribute values can be set two ways: As with CSS properties, former has some advantages:  Makes clear that setting an HTML attribute, not merely a property of an object  Avoids certain special cases, e.g. element.setAttribute(“class”, “warning”); //DOM element.className = “warning”; //req’d in IE6 class is reserved word in JavaScript
  • 76. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 76 DOM Event Handling Note: IE6 has a different event model Event instance created for each event Event instance properties:  type: name of event (click, mouseover, etc.)  target: Node corresponding to document element that generated the event (e.g., button element for click, img for mouseover). This is the event target.
  • 77. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 77 DOM Event Handling JavaScript event listener: function that is called with Event instance when a certain event occurs An event listener is associated with a target element by calling addEventListener() on the element
  • 78. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 78 DOM Event Handling
  • 79. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 79 DOM Event Handling Event target
  • 80. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 80 DOM Event Handling Event type
  • 81. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 81 DOM Event Handling DOM event types:  All HTML intrinsic events except keypress, keydown, keyup, and dblclick  Also has some others that are typically targeted at the window object:
  • 82. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 82 DOM Event Handling Event handler Definition of event handler
  • 83. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 83 DOM Event Handling Event instance
  • 84. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 84 DOM Event Handling Normally false (more later)
  • 85. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 85 DOM Event Handling
  • 86. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 86 DOM Event Handling: Mouse Events DOM2 mouse events  click  mousedown  mouseup  mousemove  mouseover  mouseout Event instances have additional properties for mouse events
  • 87. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 87 DOM Event Handling: Mouse Events
  • 88. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 88 DOM Event Handling: Mouse Events Example: mouse “trail”
  • 89. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 89 DOM Event Handling: Mouse Events HTML document: JavaScript init() function: Create “blips” Add event listener String uniquely identifying this div
  • 90. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 90 DOM Event Handling: Mouse Events Style sheet for “blips”: Initially, not displayed
  • 91. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 91 DOM Event Handling: Mouse Events Event handler updateDivs(): Convert mouse location from Number to String and append units
  • 92. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 92 DOM Event Handling: Mouse Events Event handler updateDivs(): Mod (remainder) operator used to cycle through “blip” divs (least-recently changed is the next div moved)
  • 93. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 93 DOM Event Propagation Target of event is lowest-level element associated with event  Ex: target is the a element if the link is clicked: <td><a href=…>click</a></td> However, event listeners associated with ancestors of the target may also be called
  • 94. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 94 DOM Event Propagation Three types of event listeners:
  • 95. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 95 DOM Event Propagation Three types of event listeners: Capturing: Listener on ancestor created with true as third arg.
  • 96. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 96 DOM Event Propagation Three types of event listeners: Target: Listener on target element
  • 97. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 97 DOM Event Propagation Three types of event listeners: Bubbling: Listener on ancestor created with false as third arg.
  • 98. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 98 DOM Event Propagation Priority of event handlers: body ol li a 1. Capturing event handlers; ancestors closest to root have highest priority Target
  • 99. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 99 DOM Event Propagation Priority of event handlers: body ol li a 2. Target event handlers
  • 100. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 100 DOM Event Propagation Priority of event handlers: body ol li a 3. Bubbling event handlers; ancestors closest to target have priority.
  • 101. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 101 DOM Event Propagation Certain events do not bubble, e.g.,  load  unload  focus  blur
  • 102. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 102 DOM Event Propagation Propagation-related properties of Event instances:  eventPhase: represents event processing phase:  1: capturing  2: target  3: bubbling  currentTarget: object (ancestor or target) associated with this event handler
  • 103. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 103 DOM Event Propagation Propagation-related method of Event instances:  stopPropagation(): lower priority event handlers will not be called Typical design:  Use bubbling event handlers to provide default processing (may be stopped)  Use capturing event handlers to provide required processing (e.g., cursor trail)
  • 104. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 104 Example: Drop-down Menus When cursor moves over upper menu …
  • 105. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 105 Example: Drop-down Menus … a drop-down appears
  • 106. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 106 Example: Drop-down Menus Background color changes as cursor moves over drop-down items
  • 107. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 107 Example: Drop-down Menus Drop-down disappears when cursor leaves both drop-down and menu
  • 108. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 108 Example: Drop-down Menus Document structure:
  • 109. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 109 Example: Drop-down Menus Document structure: Event handlers will be added by JavaScript code
  • 110. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 110 Example: Drop-down Menus Document structure: Top menu is a table
  • 111. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 111 Example: Drop-down Menus Document structure: Each top menu item is a (positioned) div CSS:
  • 112. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 112 Example: Drop-down Menus Document structure: Associated drop-down is in a div that is out of the normal flow and initially invisible CSS:
  • 113. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 113 Example: Drop-down Menus Document structure: Associated drop-down is a table
  • 114. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 114 Example: Drop-down Menus Full style rules:
  • 115. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 115 Example: Drop-down Menus Full style rules: Top menu item div is “positioned” but not moved from normal flow location
  • 116. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 116 Example: Drop-down Menus Full style rules: Upper left corner of drop-down div overlaps bottom border of top menu
  • 117. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 117 Example: Drop-down Menus Full style rules: Drop-down drawn over lower z-index elements
  • 118. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 118 Example: Drop-down Menus Adding event handlers to top menu:  Document:  JavaScript addEventHandlers(): Target event handlers
  • 119. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 119 Example: Drop-down Menus Adding event handlers to top menu:  Document:  JavaScript addEventListener(): menuBar1 will be target of events; adding reference to the drop-down div makes it easy for event handler to access the drop-down
  • 120. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 120 Example: Drop-down Menus
  • 121. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 121 Example: Drop-down Menus Basic processing: change visibility of drop-down
  • 122. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 122 Example: Drop-down Menus Ignore bubbling mouseover events from drop-down
  • 123. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 123 Example: Drop-down Menus Ignore mouseout event if cursor is remaining over menu item or drop-down (self or descendant)
  • 124. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 124 Example: Drop-down Menus
  • 125. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 125 Example: Drop-down Menus Adding event handlers to drop-down:  Document:  JavaScript addEventListener():
  • 126. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 126 Example: Drop-down Menus
  • 127. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 127 Example: Drop-down Menus Don’t bother changing style if this event bubbled from a descendant.
  • 128. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 128 Example: Drop-down Menus Don’t bubble up to showDropDown since the drop-down must be visible
  • 129. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 129 Example: Drop-down Menus Ignore mouseout to a descendant
  • 130. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 130 DOM Event Cancellation Browser provides default event listener for certain elements and events  Ex: click on hyperlink  Ex: click on submit button Default listeners are called after all user-specified listeners stopPropagation() does not affect default listeners Instead, call preventDefault() on Event instance to cancel default event handling
  • 131. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 131 DOM Form Validation
  • 132. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 132 DOM Form Validation <body onload="addListeners();"> <form id="validatedForm" action="http://www.example.com"> <p> <label>Required input: <input type="text" name="requiredField" id="requiredField" /> </label> <input type="submit" name="submit" value="Click to submit" /> </p> </form> </body>
  • 133. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 133 DOM Form Validation
  • 134. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 134 DOM Form Validation Listen for form to be submitted
  • 135. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 135 DOM Form Validation Must use value property to access value entered in text field on form
  • 136. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 136 DOM Form Validation Regular expression literal representing “set of strings consisting only of white space”
  • 137. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 137 DOM Form Validation Cancel browser’s default submit event processing
  • 138. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 138 DOM Event Generation Several Element’s provide methods for generating events  Ex: causes text in text field to be selected and a select event to occur
  • 139. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 139 Detecting Host Objects How can a JavaScript program test for the existence of a certain host object?  Does the style element have a setProperty() method?  If we’re also not sure that element is defined or that style exists:
  • 140. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 140 Detecting Host Objects Is a browser DOM-compliant?  Ex: document.implementation(“Core”, “2.0”) returns true if browser implements all of DOM 2 Core module, false otherwise  Problem: what does false tell you? Many scripts attempt to directly determine the browser, but…  What about new browsers?  Some browsers can “lie” about what they are
  • 141. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 141 IE6 and the DOM There are a number of non compliance to the DOM specification in IE6. We do not cover these in class, but you are encouraged to read the book and the coming slides in details, as this problem is very representative of web programmer’s real life. Dealing with these issues is part of the trade!
  • 142. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 142 IE6 and the DOM No Node object (and associated constants) No setProperty() or getPropertyValue() Must use “className” rather than “class” in setAttribute() and getAttribute() Empty div/span height cannot be made less than character height
  • 143. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 143 IE6 and the DOM No addEventListener() (so no multiple listeners) Cannot use setAttribute() to specify intrinsic event attribute  DOM:  IE6: Value assigned is a function Object (method) rather than a String.
  • 144. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 144 IE6 and the DOM Adding listeners to both IE6 and DOM: String-valued in DOM, initially null in IE6
  • 145. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 145 IE6 and the DOM Passing arguments to event listeners:  DOM:  IE6: Listener is called as a method in IE6, so this is a reference to button
  • 146. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 146 IE6 and the DOM Passing arguments to event listeners: DOM approach Test that arguments are defined
  • 147. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 147 IE6 and the DOM Passing arguments to event listeners: IE6 approach Test for host object created by IE6 when event occurs
  • 148. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 148 IE6 and the DOM Passing arguments to event listeners: IE6 approach DOM approach
  • 149. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 149 IE6 and the DOM Passing arguments to event listeners: IE6 approach DOM approach
  • 150. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 150 IE6 and the DOM IE6 does not pass an Event instance to event listeners Instead, IE6 creates a global object event when an (intrinsic) event occurs Testing for non-DOM call: In a DOM-compliant call to event listener there is one argument that is an Event instance Basically an Array of call arguments
  • 151. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 151 IE6 and the DOM Converting event object to Event-like: Undefined if IE6 Global object created by IE6 In IE6, evaluates to Object value of DOM’s Event currentTarget property
  • 152. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 152 IE6 and the DOM Converting event object to Event-like:
  • 153. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 153 IE6 and the DOM Converting event object to Event-like: Use exception handling for convenience rather than testing for existence of properties
  • 154. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 154 IE6 and the DOM Converting event object to Event-like: Most type values (except dblclick) are copied without change
  • 155. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 155 IE6 and the DOM Converting event object to Event-like: IE6 uses a different name for target
  • 156. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 156 IE6 and the DOM Converting event object to Event-like: currentTarget passed in from event listener: within eventConvert(), this refers to the global object!
  • 157. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 157 IE6 and the DOM Converting event object to Event-like:
  • 158. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 158 IE6 and the DOM Converting event object to Event-like: Use function expressions to define DOM methods as setting IE properties
  • 159. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 159 IE6 and the DOM Converting event object to Event-like: Most mouse-event properties are identical
  • 160. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 160 IE6 and the DOM Converting event object to Event-like: Buttons are numbered differently
  • 161. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 161 IE6 and the DOM Converting event object to Event-like: Different names for relatedTarget
  • 162. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 162 IE6 and the DOM Converting event object to Event-like:  Capturing listeners behave somewhat differently in IE6 and DOM, so eventConvert() did not attempt to simulate the eventPhase DOM property
  • 163. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 163 Other Common Host Objects Browsers also provide many non-DOM host objects as properties of window While no formal standard defines these objects, many host objects are very similar in IE6 and Mozilla
  • 164. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 164 Other Common Host Objects
  • 165. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 165 Other Common Host Objects
  • 166. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 166 Other Common Host Objects
  • 167. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 167 Other Common Host Objects open() creates a pop-up window  Each window has its own global object, host objects, etc.  Use pop-ups with care:  Pop-ups may be blocked by the browser  They can annoy and/or confuse users
  • 168. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 168 Other Common Host Objects
  • 169. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 169 Other Common Host Objects
  • 170. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 170 Other Common Host Objects
  • 171. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 171 Other Common Host Objects
  • 172. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 172 Other Common Host Objects
  • 173. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 173 Other Common Host Objects
  • 174. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 174 Other Common Host Objects
  • 175. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 175 Other Common Host Objects
  • 176. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 176 Other Common Host Objects
  • 177. Guy-Vincent Jourdan :: CSI 3140 :: based on Jeffrey C. Jackson’s slides 177 Other Common Host Objects navigator: (unreliable) information about browser, including String-valued properties:  appName  appVersion  userAgent screen: information about physical device, including Number properties:  availHeight, availWidth: effective screen size (pixels)  colorDepth: bits per pixel