|  | Acknowledgments | xvii | 
|  | Introduction | xix | 
| Part I | Overview of the W3C Document Object Model |  | 
| Chapter 1 | Introduction to the DOM | 3 | 
|  | What Is the Document Object Model? | 4 | 
|  | The DOM Philosophy | 6 | 
|  | Yet Another Standard? | 6 | 
|  | Design Philosophy | 7 | 
|  | Object-Oriented vs. Flat Views of the DOM Interfaces | 7 | 
|  | History of the DOM | 8 | 
|  | The DOM on the Client | 8 | 
|  | The DOM on the Server | 9 | 
|  | Levels of the DOM | 9 | 
|  | Level 1 | 10 | 
|  | Level 2 | 11 | 
|  | Level 3 | 12 | 
|  | Conventions Used in the DOM Specification | 12 | 
|  | What the DOM Isn't | 14 | 
|  | Conclusion | 15 | 
| Chapter 2 | How the DOM Represents Structured Documents | 17 | 
|  | Basic DOM Data Types | 18 | 
|  | The DOMString Type | 18 | 
|  | The DOMTimeStamp Type | 19 | 
|  | Handling Errors: The DOMException Interface | 19 | 
|  | The Document Tree Structure | 20 | 
|  | DOM Node Types | 22 | 
|  | The Fundamental Core DOM Interfaces | 24 | 
|  | DOMException Codes | 25 | 
|  | The DOM Node Interface | 26 | 
|  | Node Helper Interfaces: NodeList and NamedNodeMap | 31 | 
|  | The DOMImplementation Interface | 33 | 
|  | The Document Interface | 34 | 
|  | The DocumentFragment Interface | 37 | 
|  | The Element Interface | 37 | 
|  | The Attr Interface | 40 | 
|  | The CharacterData Interface | 41 | 
|  | The Comment Interface | 43 | 
|  | The Text Interface | 43 | 
|  | The Extended Core Interfaces | 44 | 
|  | CDATASection Interface | 44 | 
|  | DocumentType Interface | 44 | 
|  | Notation Interface | 45 | 
|  | Entity Interface | 46 | 
|  | EntityReference Interface | 46 | 
|  | ProcessingInstruction Interface | 46 | 
|  | Conclusion | 47 | 
| Chapter 3 | Navigating and Manipulating Structured Documents | 49 | 
|  | Working with Nodes | 50 | 
|  | A Word About Namespaces | 51 | 
|  | Obtaining Object References to Nodes | 52 | 
|  | Inspecting Nodes | 53 | 
|  | Manipulating Nodes | 56 | 
|  | Creating New Nodes | 62 | 
|  | Importing Nodes from Other Documents | 65 | 
|  | Traversing Documents | 67 | 
|  | Using the Node Interface Properties | 67 | 
|  | Using the DOM Level 2 Traversal Module | 68 | 
|  | Conclusion | 84 | 
| Part II | Real-World DOM |  | 
| Chapter 4 | Algorithms | 87 | 
|  | DOM Algorithms | 88 | 
|  | Basic Node Traversal Algorithms | 88 | 
|  | Position-Based Algorithms | 91 | 
|  | Determining Whether a Node Has an Ancestor of a Given Type | 91 | 
|  | Determining Whether a Node Has a Sibling of a Given Type | 92 | 
|  | Content-Based Algorithms | 93 | 
|  | Determining Whether a Node Contains Another Node | 93 | 
|  | Better Versions of Node Interfaces: Retrieving Relative Nodes by Type | 95 | 
|  | Finding a Node by Attribute Value | 97 | 
|  | Conclusion | 99 | 
| Chapter 5 | Browsers | 101 | 
|  | DOM Support in the Major Browsers | 102 | 
|  | Microsoft Internet Explorer 6 | 103 | 
|  | Netscape Navigator 6.x | 103 | 
|  | Opera 6 | 104 | 
|  | Using the DOM in a Browser Environment | 104 | 
|  | Obtaining a Reference to the Document | 105 | 
|  | Examining the Structure and Content of a Page | 106 | 
|  | Creating and Modifying Page Elements | 110 | 
|  | Handling Events with the DOM Level 2 Events Interface | 116 | 
|  | Internet Explorer--Specific Methods and Properties | 127 | 
|  | Internet Explorer--Specific Properties | 127 | 
|  | Internet Explorer--Specific Methods | 128 | 
|  | Browser Quirks | 129 | 
|  | Internet Explorer | 130 | 
|  | Netscape Navigator | 130 | 
|  | Conclusion | 130 | 
| Chapter 6 | Applications | 133 | 
|  | DOM Implementations Aren't Just for Browsers | 134 | 
|  | Standalone vs. Embedded DOM Implementations | 135 | 
|  | The Apache Xerces Parser | 135 | 
|  | Where to Get Xerces | 136 | 
|  | Installing Xerces | 137 | 
|  | Getting to Know the API | 139 | 
|  | Using Xerces | 141 | 
|  | Where to Get More Information About Xerces | 152 | 
|  | The Microsoft MSXML Parser | 152 | 
|  | Where to Get MSXML4 | 152 | 
|  | Installing MSXML4 | 152 | 
|  | Getting to Know the API | 153 | 
|  | Using MSXML4 | 153 | 
|  | Where to Get More Information About MSXML | 159 | 
|  | Macromedia Dreamweaver | 159 | 
|  | Where to Get Dreamweaver | 159 | 
|  | The DOM in Dreamweaver | 159 | 
|  | Getting to Know the API | 160 | 
|  | Using the Dreamweaver DOM | 162 | 
|  | Where to Get More Information About the Dreamweaver DOM | 167 | 
|  | Conclusion | 167 | 
| Chapter 7 | Debugging DOM Applications | 169 | 
|  | Importance of Good Debugging Skills | 170 | 
|  | Be Assertive: Use ASSERT() | 171 | 
|  | Defining ASSERT() | 171 | 
|  | Using ASSERT() Effectively | 173 | 
|  | Getting Fancy with ASSERT() | 177 | 
|  | Tracing Your Steps with TraceConsole | 179 | 
|  | Using the TraceConsole | 181 | 
|  | The TraceConsole Functions | 182 | 
|  | The DOMDumper | 192 | 
|  | DOMDumper Output | 193 | 
|  | DOMDumper Code | 195 | 
|  | Using the DOMDumper | 198 | 
|  | Conclusion | 201 | 
| Part III | Practical Uses of the DOM |  | 
| Chapter 8 | Providing Automatic Document Navigation | 205 | 
|  | Using the DOM to Provide Better Document Navigation | 206 | 
|  | Example: On-the-Fly Bookmarks | 207 | 
|  | Setting Up | 210 | 
|  | Creating the User Interface Elements | 211 | 
|  | Building the Bookmark List | 212 | 
|  | Inserting the Bookmark List into the Document | 213 | 
|  | Responding to the User's Bookmark Selection | 214 | 
|  | Example: Automatic Table of Contents | 215 | 
|  | Setting Up | 218 | 
|  | Scanning the Document's Nodes | 219 | 
|  | Building a TOC Destination | 219 | 
|  | Adding the TOC Entry | 220 | 
|  | Example: Document Placeholders | 221 | 
|  | Setting Up | 224 | 
|  | Handling Click Events | 225 | 
|  | Finding a Containing Paragraph Node | 226 | 
|  | Conclusion | 227 | 
| Chapter 9 | Dynamic User Interfaces | 229 | 
|  | Building Dynamic User Interfaces with the DOM | 230 | 
|  | Creating a Color Picker | 231 | 
|  | In-Place List Editing | 238 | 
|  | DOM-Based Pop-up Menus | 246 | 
|  | Conclusion | 254 | 
| Chapter 10 | Client Processing of Data-Driven Documents | 255 | 
|  | Processing Data-Driven Documents on the Client | 256 | 
|  | Client-Side Sorting | 257 | 
|  | Sorting a List | 257 | 
|  | Sorting a Table | 263 | 
|  | Post-Processing Server-Generated Documents | 271 | 
|  | Working with Embedded XML Data in Web Pages | 275 | 
|  | Data Islands in Internet Explorer | 276 | 
|  | Data Islands in Netscape Navigator | 281 | 
|  | Example: Joe's Cafe Menu Application | 283 | 
|  | The Menu Page | 283 | 
|  | The Menu XML Code | 285 | 
|  | Generating the Menu HTML | 287 | 
|  | Handling User Interaction | 295 | 
|  | Conclusion | 299 | 
| Chapter 11 | Future Directions for the DOM | 301 | 
|  | Where Is the DOM Headed? | 302 | 
|  | Proposed Changes in DOM Level 3 | 303 | 
|  | General Changes | 303 | 
|  | Abstract Schema Support | 307 | 
|  | Error Handling | 308 | 
|  | Loading and Saving DOM Documents | 309 | 
|  | Attaching Application-Specific Data to Nodes | 313 | 
|  | Determining Relative Document Positions of Nodes | 316 | 
|  | XPath Support | 318 | 
|  | Other Potential Future DOM Enhancements | 326 | 
|  | XSLT Support in the DOM | 326 | 
|  | Transaction-Oriented Processing | 332 | 
|  | Conclusion | 334 | 
| Appendix | DOM Core Level 1 API Reference | 337 | 
|  | DOM Interface Inheritance Tree | 338 | 
|  | Interface Attr | 338 | 
|  | Properties | 339 | 
|  | Methods | 339 | 
|  | Interface CDATA | 339 | 
|  | Properties | 340 | 
|  | Methods | 340 | 
|  | Interface CharacterData | 340 | 
|  | Properties | 340 | 
|  | Methods | 341 | 
|  | Interface Comment | 343 | 
|  | Properties | 343 | 
|  | Methods | 343 | 
|  | Interface Document | 343 | 
|  | Properties | 343 | 
|  | Methods | 344 | 
|  | Interface DocumentFragment | 347 | 
|  | Properties | 347 | 
|  | Methods | 347 | 
|  | Interface DocumentType | 347 | 
|  | Properties | 348 | 
|  | Methods | 348 | 
|  | Interface DOMImplementation | 348 | 
|  | Properties | 349 | 
|  | Methods | 349 | 
|  | Interface DOMException | 349 | 
|  | Constants | 349 | 
|  | Properties | 350 | 
|  | Methods | 350 | 
|  | Interface Element | 350 | 
|  | Properties | 350 | 
|  | Methods | 350 | 
|  | Interface Entity | 353 | 
|  | Properties | 353 | 
|  | Methods | 354 | 
|  | Interface EntityReference | 354 | 
|  | Properties | 354 | 
|  | Methods | 354 | 
|  | Interface NamedNodeMap | 354 | 
|  | Properties | 355 | 
|  | Methods | 355 | 
|  | Interface Node | 356 | 
|  | Constants | 357 | 
|  | Properties | 357 | 
|  | Methods | 359 | 
|  | Interface NodeList | 361 | 
|  | Properties | 361 | 
|  | Methods | 362 | 
|  | Interface Natation | 362 | 
|  | Properties | 362 | 
|  | Methods | 363 | 
|  | Interface ProcessingInstruction | 363 | 
|  | Properties | 363 | 
|  | Methods | 363 | 
|  | Interface Text | 363 | 
|  | Properties | 364 | 
|  | Methods | 364 | 
|  | Index | 365 |