# JavaScript Programming/DOM and BOM

This lesson introduces the JavaScript Document Object Model (DOM) and Browser Object Model (BOM).

## Objectives and Skills

Objectives and skills for this lesson include:
* Identify and construct the Document Object Model (DOM) tree
** window; document; body; other HTML elements
* Complete and debug code that outputs to an HTML document
** innerHTML; document.write
* Complete and debug code that interacts with the Browser Object Model (BOM)
** Manage state; display dialogs; determine screen size

## Readings

* Wikipedia: Document Object Model
* Wikipedia: Browser Object Model
* Wikibooks: JavaScript/Introduction to the Document Object Model (DOM)

## Multimedia

* YouTube: JavaScript Tutorial for Beginners - 25 - Document Object Model
* YouTube: JavaScript Tutorial for Beginners - 40 - Traversing the DOM
* YouTube: JavaScript Tutorial for Beginners - 41 - Traversing the DOM Part 2
* YouTube: JavaScript Tutorial for Beginners - 42 - Traversing the DOM Part 3
* YouTube: An Introduction to the DOM (Document Object Model) in JavaScript
* YouTube: Document Object Model Tutorial
* Youtube: Javascript DOM Manipulation
* YouTube: JavaScript Programming Tutorial 91 - Intro to the DOM
* JavaScript DOM Manipulation – Full Course for Beginners

## Examples

* W3Schools: JavaScript HTML DOM
* W3Schools: JavaScript HTML DOM Methods
* W3Schools: JavaScript DOM Document
* W3Schools: JavaScript Browser Document Model (BOM)
* W3Schools: JavaScript Window Screen
* W3Schools: JavaScript Nodes
* W3Schools: onresize Event
* Example Code

## Activities

Complete the following activities using external JavaScript code. Apply JavaScript best practices, including comments, indentations, naming conventions, and constants. Use input elements for input and respond to input or change events, add buttons and respond to click events, or set a timer interval and respond to interval events. Use HTML elements for output. Use separate functions for each type of processing. Avoid global variables by passing parameters and returning results. Create test data to validate the accuracy of each program. Add comments at the top of the program and include references to any resources used.
* Create JavaScript code to display all tags in the current HTML document using document.getElementsByTagName("*").
* Create JavaScript code to display the nodeName and nodeType for all nodes in the current HTML document using the childNodes function. Use a JavaScript object (key/value pairs) to look up the nodeType and convert the type number to a string description.
* Create JavaScript code to display the current window size, screen size, and location information. Use the resize event to update the display whenever the window size changes.

## Lesson Summary

* The Document Object Model (DOM) defines a standard for accessing documents.
* The Browser Object Model (BOM) allows JavaScript to "talk to" the browser.
* In the HTML DOM, the Element object represents an HTML element, like P, DIV, A, TABLE, or any other HTML element.
* DOM is frequently depicted similarly to a tree, where the child nodes branch downwards off their parents.
* Parent-child relationships within the DOM can be used to target document elements. It is possible to move (traverse) from parent to child (downwards), from child to parent (upwards), and from sibling to sibling (sideways).
* HTML DOM is a standard for how to get, change, add, or delete HTML elements.
* DOM is essential for allowing webpages to change shape in response to user activity.
* The BOM allows JavaScript to access several peices of information about a browser (with some limits for security) including: history, screen size, location, and cookies.

## Key Terms
### Browser Object Model (BOM)

    The API of the browser that allows JavaScript to communicate with the browser.

### Document Object Model (DOM)

    The data representation of the objects that comprise the structure and content of a document on the web.

### node

    An HTML element. The "DOM" is a tree structure that represents the HTML of the website, and every HTML element is a "node". More specifically, "Node" is an interface that is implemented by multiple objects.

### Node Relationships

    The nodes in the node tree have a hierarchical relationship to each other. The terms parent, child, and sibling are used to describe the relationships.

## See Also

* CSS Object Model
* DotNetTricks: Understanding DOM and BOM
* JavaScript Tutorial: JavaScript BOM
* TutorialRepublic: JavaScript DOM Styling
* JavaScript Tutorial: DOM & BOM Revisited
* JavaScript Tutorial: DOM and BOM
* DOM vs BOM in JavaScript
* JavaScript Info: Browser Environment
* MDN: Manipulating Documents
* onresize Event
* W3Schools: HTML Geolocation API
* GeeksForGeeks: Difference Between DOM & BOM?