|
home—lects—hws
D2L—breeze (snow day)
We'll look at using javascript to modify the DOM in response to events. Also, we'll consider an extended example of refactoring some javascript (in the process, illustrating some standard ways of modifying the DOM).
You have already talked about javascript code and the DOM in WebI; we'll review those concepts in the context of improving an actual web page.
We think of HTML as being a tree. (Or, a way of representing a document's tree-structure as a flat string full of angle-brackets.) The HTML gives content-information associated with nodes of the tree; CSS further provides presentation-information associated with nodes. And the browser even tracks more information with each node: all its default-styles and spacing, and more we'll see below.
Barland's definition:DOM (“Document Object Model”): The tree, as it exists in-memory, representing the web-page; it can be modified after the page is loaded.
Do not attempt to write any significant javascript without a decent debugging tool like Firebug or Chrome Tools' javascript console window help. At least, not if you value your sanity. In particular:
Note that all HTML attributes become DOM corresponding attributes:
if you have “
var someNode = document.getElementById("sample"); var isBarlandSpeakingTruth = (someNode.lang==="en" && someNode.id==="sample" && someNode.contentEditable==="true"); someNode.style.color = (isBarlandSpeakingTruth ? "green" : "orange"); |
“zzzz” |
Weirdnesses/inconsistencies:
We'll show-source, and discuss evolution of the javascript program. For each version: discuss how much work it would be to add another category (animal)? (And: what is the least conceivable amount of work/info required?)
Applying the above: How can/should we generalize a Bingo card javscript?
Note: here's
an on-line javascript interpreter.
We'll use it to note that:
arrays are objects;
any object can have properties accessed via square-brackets;
but you should still iterate over arrays by indexing over [0,data.count).
You can also use “
Arrays in javascript are not associative -- the indices are only numeric.
However: any object (array or string or DOM-node or whatever) can have
properties;
properties are key/value pairs.
So I guess every object could be used as an asssociate array incidentally.
This is discouraged, because other code might add properties to your object.
Just to muddle things thoroughly, properties can be assigned/retrieve
either through dot-notation (“
Arrays have a property named “length”. To demo, paste the below into this on-line javascript interpreter.
var a; a = [71,72,73]; a.foo = "huh"; writeln( "The length of a: " + a.length ); writeln( "The length of a: " + a['length'] ); writeln( "Using a regular for-loop, to loop over numeric indices:" ); for (var i = 0; i < a.length; ++i ) { writeln("at index i=" + i + ", a[i]=" + a[i] ); } writeln( "Using for-in, to loop over all *enumerable* properties:" ); for (var i in a) { writeln("at index i=" + i + ", a[i]=" + a[i] ); } writeln( "Note: the for-in loop will also include properties from the object's " + "parent object, and it's parent, etc." ); writeln( "Note: `length` is a property of the object, but the `for` loop doesn't " + "enumerate over it. That's because some properties can be tagged as " + "'non-enumerable' -- a concept invented just for for-each loops?" ); |
Tips for minimizing the difference between php and javascript code:
getDocElement('fname') |
This has the advantage that you can provide a default argument,
to use when the element doesn't exist [especially helpful in
php handling checkboxes, where if no checkboxes were selected
the lookup
Note:Finished here after day 3, w/ discussion of using debugger.
home—lects—hws
D2L—breeze (snow day)
©2016, Ian Barland, Radford University Last modified 2016.Oct.14 (Fri) |
Please mail any suggestions (incl. typos, broken links) to ibarlandradford.edu |