100% found this document useful (6 votes)
40 views

Download Full JavaScript jQuery The Missing Manual Second Edition David Sawyer Mcfarland PDF All Chapters

Mcfarland

Uploaded by

shujaipindis
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (6 votes)
40 views

Download Full JavaScript jQuery The Missing Manual Second Edition David Sawyer Mcfarland PDF All Chapters

Mcfarland

Uploaded by

shujaipindis
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 75

Download the full version of the ebook at ebookfinal.

com

JavaScript jQuery The Missing Manual Second


Edition David Sawyer Mcfarland

https://ebookfinal.com/download/javascript-jquery-the-
missing-manual-second-edition-david-sawyer-mcfarland/

OR CLICK BUTTON

DOWNLOAD EBOOK

Download more ebook instantly today at https://ebookfinal.com


Instant digital products (PDF, ePub, MOBI) available
Download now and explore formats that suit you...

CSS The Missing Manual David Sawyer Mcfarland

https://ebookfinal.com/download/css-the-missing-manual-david-sawyer-
mcfarland/

ebookfinal.com

Dreamweaver CS4 The Missing Manual 1st Edition David


Sawyer Mcfarland

https://ebookfinal.com/download/dreamweaver-cs4-the-missing-
manual-1st-edition-david-sawyer-mcfarland/

ebookfinal.com

Dreamweaver CC The Missing Manual 2nd Edition Covers 2014


release David Sawyer Mcfarland

https://ebookfinal.com/download/dreamweaver-cc-the-missing-manual-2nd-
edition-covers-2014-release-david-sawyer-mcfarland/

ebookfinal.com

HTML5 The Missing Manual Second Edition Matthew Macdonald

https://ebookfinal.com/download/html5-the-missing-manual-second-
edition-matthew-macdonald/

ebookfinal.com
iPhone The Missing Manual 3G 2nd Edition David Pogue

https://ebookfinal.com/download/iphone-the-missing-manual-3g-2nd-
edition-david-pogue/

ebookfinal.com

PHP MySQL The Missing Manual Second Edition Brett


Mclaughlin

https://ebookfinal.com/download/php-mysql-the-missing-manual-second-
edition-brett-mclaughlin/

ebookfinal.com

David Pogue s Digital Photography The Missing Manual 1st


Edition David Pogue

https://ebookfinal.com/download/david-pogue-s-digital-photography-the-
missing-manual-1st-edition-david-pogue/

ebookfinal.com

Mac OS X The Missing Manual Panther Edition David Pogue

https://ebookfinal.com/download/mac-os-x-the-missing-manual-panther-
edition-david-pogue/

ebookfinal.com

Drupal 6 JavaScript and jQuery 1st Edition Matt Butcher

https://ebookfinal.com/download/drupal-6-javascript-and-jquery-1st-
edition-matt-butcher/

ebookfinal.com
JavaScript &
jQuery
The book that should have been in the box
®
JavaScript &
jQuery 2nd Edition

The book that should have been in the box ®

David Sawyer McFarland

Beijing | Cambridge | Farnham | Köln | Sebastopol | Tokyo


JavaScript & jQuery: The Missing Manual, Second Edition
by David Sawyer McFarland

Copyright © 2012 David Sawyer McFarland. All rights reserved.


Printed in the United States of America.
Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472.
O’Reilly Media books may be purchased for educational, business, or sales promotional use.
Online editions are also available for most titles: safari.oreilly.com. For more information,
contact our corporate/institutional sales department: 800-998-9938 or corporate@oreilly.com.
Printing History:
July 2008: First Edition.
October 2011: Second Edition.

Nutshell Handbook, the Nutshell Handbook logo, the O’Reilly logo, and “The book that should
have been in the box” are registered trademarks of O’Reilly Media, Inc. JavaScript & jQuery:
The Missing Manual, The Missing Manual logo, Pogue Press, and the Pogue Press logo are
trademarks of O’Reilly Media, Inc.
Many of the designations used by manufacturers and sellers to distinguish their products are
claimed as trademarks. Where those designations appear in this book, and O’Reilly Media, Inc.,
was aware of a trademark claim, the designations have been printed in caps or initial caps.
While every precaution has been taken in the preparation of this book, the publisher and
authors assume no responsibility for errors or omissions, or for damages resulting from the use
of the information contained herein.

ISBN: 978-1-449-3-9902-3
[M]
Table of Contents

The Missing Credits. . . . . . . . . . . . . . . . . . . . . . . . . . xiii


Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Part One: Getting Started with JavaScript


Chapter 1: Writing Your First JavaScript Program. . . . . . . . . . . 21
Introducing Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
What’s a Computer Program?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
How to Add JavaScript to a Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
External JavaScript Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Your First JavaScript Program.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Writing Text on a Web Page.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Attaching an External JavaScript File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Tracking Down Errors.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
The Firefox JavaScript Console.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Displaying the Internet Explorer 9 Console. . . . . . . . . . . . . . . . . . . . . . . . 37
Opening the Chrome JavaScript Console. . . . . . . . . . . . . . . . . . . . . . . . . 38
Accessing the Safari Error Console. . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Chapter 2: The Grammar of JavaScript. . . . . . . . . . . . . . . . . 41


Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Built-In Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Types of Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Booleans. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Creating a Variable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Using Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Working with Data Types and Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Basic Math. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
The Order of Operations.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

v
Combining Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Combining Numbers and Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Changing the Values in Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Tutorial: Using Variables to Create Messages. . . . . . . . . . . . . . . . . . . . . . . . . 55
Tutorial: Asking for Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Creating an Array.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Accessing Items in an Array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Adding Items to an Array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Deleting Items from an Array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Tutorial: Writing to a Web Page Using Arrays. . . . . . . . . . . . . . . . . . . . . . . . . 66
A Quick Object Lesson. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
When to Use Comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Comments in This Book. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

Chapter 3: Adding Logic and Control to Your Programs. . . . . . 77


Making Programs React Intelligently. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Conditional Statement Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Adding a Backup Plan. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Testing More Than One Condition.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
More Complex Conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Nesting Conditional Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Tips for Writing Conditional Statements.. . . . . . . . . . . . . . . . . . . . . . . . . 88
Tutorial: Using Conditional Statements.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Handling Repetitive Tasks with Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
While Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Loops and Arrays.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
For Loops.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Do/While Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Functions: Turn Useful Code Into Reusable Commands. . . . . . . . . . . . . . . . . . . 100
Mini-Tutorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Giving Information to Your Functions. . . . . . . . . . . . . . . . . . . . . . . . . . 102
Retrieving Information from Functions. . . . . . . . . . . . . . . . . . . . . . . . . 104
Keeping Variables from Colliding. . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Tutorial: A Simple Quiz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

Part Two: Getting Started with jQuery


Chapter 4: Introducing jQuery.. . . . . . . . . . . . . . . . . . . . . 117
About JavaScript Libraries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Getting jQuery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Adding jQuery to a Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Modifying Web Pages: An Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Understanding the Document Object Model.. . . . . . . . . . . . . . . . . . . . . . . . 127

vi table of contents
Selecting Page Elements: The jQuery Way. . . . . . . . . . . . . . . . . . . . . . . . . . 129
Basic Selectors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Advanced Selectors.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
jQuery Filters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Understanding jQuery Selections. . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Adding Content to a Page.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Replacing and Removing Selections. . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Setting and Reading Tag Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Reading and Changing CSS Properties. . . . . . . . . . . . . . . . . . . . . . . . . 143
Changing Multiple CSS Properties at Once. . . . . . . . . . . . . . . . . . . . . . . 144
Reading, Setting, and Removing HTML Attributes. . . . . . . . . . . . . . . . . . . . . . 146
Acting on Each Element in a Selection. . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Anonymous Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
this and $(this). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Automatic Pull Quotes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Programming.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

Chapter 5: Action/Reaction: Making Pages Come


Alive with Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
What Are Events?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Mouse Events.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Document/Window Events.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Form Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Keyboard Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Using Events the jQuery Way.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Tutorial: Introducing Events.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
More jQuery Event Concepts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Waiting for the HTML to Load. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
jQuery Events.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
The Event Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Stopping an Event’s Normal Behavior. . . . . . . . . . . . . . . . . . . . . . . . . . 175
Removing Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Advanced Event Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Other Ways to Use the bind() Function. . . . . . . . . . . . . . . . . . . . . . . . . 179
Tutorial: A One-Page FAQ.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Overview of the Task. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
The Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

Chapter 6: Animations and Effects. . . . . . . . . . . . . . . . . . . 185


jQuery Effects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Basic Showing and Hiding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Fading Elements In and Out. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Sliding Elements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

table of contents vii


Tutorial: Login Slider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
The Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Animations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Easing.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Performing an Action After an Effect Is Completed . . . . . . . . . . . . . . . . . . . . . 196
Tutorial: Animated Dashboard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
The Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

Part Three: Building Web Page Features


Chapter 7: Improving Your Images. . . . . . . . . . . . . . . . . . . 207
Swapping Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Changing an Image’s src Attribute.. . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Preloading Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Rollover Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Tutorial: Adding Rollover Images.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Overview of the Task. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
The Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Tutorial: Photo Gallery with Effects.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Overview of Task. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
The Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Advanced Gallery with jQuery FancyBox.. . . . . . . . . . . . . . . . . . . . . . . . . . 222
The Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Creating a Gallery of Images.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Customizing FancyBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Tutorial: FancyBox Photo Gallery.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

Chapter 8: Improving Navigation. . . . . . . . . . . . . . . . . . . . 235


Some Link Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Selecting Links with JavaScript.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Determining a Link’s Destination. . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Don’t Follow That Link. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Opening External Links in a New Window. . . . . . . . . . . . . . . . . . . . . . . . . . 238
Creating New Windows.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Window Properties.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Opening Pages in a Window on the Page. . . . . . . . . . . . . . . . . . . . . . . . . . 245
Tutorial: Opening a Page Within a Page. . . . . . . . . . . . . . . . . . . . . . . . . 248
Basic, Animated Navigation Bar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
The HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
The CSS.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
The JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
The Tutorial.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

viii table of contents


Chapter 9: Enhancing Web Forms.. . . . . . . . . . . . . . . . . . . 257
Understanding Forms.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Selecting Form Elements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Getting and Setting the Value of a Form Element. . . . . . . . . . . . . . . . . . . . 261
Determining Whether Buttons and Boxes Are Checked.. . . . . . . . . . . . . . . . 262
Form Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Adding Smarts to Your Forms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Focusing the First Field in a Form. . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Disabling and Enabling Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Hiding and Showing Form Options. . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Tutorial: Basic Form Enhancements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Focusing a Field. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Disabling Form Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Hiding Form Fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Form Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
jQuery Validation Plug-in.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Basic Validation.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Advanced Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Styling Error Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Validation Tutorial.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Basic Validation.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Advanced Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Validating Checkboxes and Radio Buttons.. . . . . . . . . . . . . . . . . . . . . . . 297
Formatting the Error Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

Chapter 10: Expanding Your Interface. . . . . . . . . . . . . . . . . 301


Organizing Information in Tabbed Panels. . . . . . . . . . . . . . . . . . . . . . . . . . 301
The HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
The CSS.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
The JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Tabbed Panels Tutorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Adding a Content Slider to Your Site. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Using AnythingSlider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
AnythingSlider Tutorial.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Customizing the Slider Appearance. . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Customizing the Slider Behavior.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Determining the Size and Position of Page Elements. . . . . . . . . . . . . . . . . . . . 319
Determining the Height and Width of Elements.. . . . . . . . . . . . . . . . . . . . 319
Determining the Position of Elements on a Page. . . . . . . . . . . . . . . . . . . . 322
Determining a Page’s Scrolling Position. . . . . . . . . . . . . . . . . . . . . . . . . 324
Adding Tooltips. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
The HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
The CSS.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
The JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Tooltips Tutorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

table of contents ix
Part Four: Ajax: Communication with the Web Server
Chapter 11: Introducing Ajax. . . . . . . . . . . . . . . . . . . . . . 341
What Is Ajax?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Ajax: The Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Pieces of the Puzzle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Talking to the Web Server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Ajax the jQuery Way. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Using the load() Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Tutorial: The load() Function.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
The get() and post() Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Formatting Data to Send to the Server. . . . . . . . . . . . . . . . . . . . . . . . . 357
Processing Data from the Server.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
Handling Errors.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Tutorial: Using the get() Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Accessing JSON Data.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Complex JSON Objects.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

Chapter 12: Flickr and Google Maps. . . . . . . . . . . . . . . . . . 377


Introducing JSONP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Adding a Flickr Feed to Your Site. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Constructing the URL.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
Using the $.getJSON() Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Understanding the Flickr JSON Feed. . . . . . . . . . . . . . . . . . . . . . . . . . 381
Tutorial: Adding Flickr Images to Your Site. . . . . . . . . . . . . . . . . . . . . . . . . . 383
Adding Google Maps to Your Site. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Setting a Location for the Map.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Other GoMap Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Adding Markers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Adding Information Windows to Markers. . . . . . . . . . . . . . . . . . . . . . . . 397
GoMap Tutorial.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

Part Five: Tips, Tricks, and Troubleshooting


Chapter 13: Getting the Most from jQuery. . . . . . . . . . . . . . 403
Useful jQuery Tips and Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
$() Is the Same as jQuery(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Saving Selections Into Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Adding Content as Few Times as Possible.. . . . . . . . . . . . . . . . . . . . . . . 405
Optimizing Your Selectors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Using the jQuery Docs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Reading a Page on the jQuery Docs Site.. . . . . . . . . . . . . . . . . . . . . . . . 411
Traversing the DOM.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
More Functions For Manipulating HTML.. . . . . . . . . . . . . . . . . . . . . . . . . . 419
Advanced Event Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

x table of contents
Chapter 14: Going Further with Java­Script. . . . . . . . . . . . . . 425
Working with Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Determining the Length of a String. . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Changing the Case of a String. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Searching a String: indexOf() Technique. . . . . . . . . . . . . . . . . . . . . . . . 427
Extracting Part of a String with slice(). . . . . . . . . . . . . . . . . . . . . . . . . . 428
Finding Patterns in Strings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
Creating and Using a Basic Regular Expression. . . . . . . . . . . . . . . . . . . . . 431
Building a Regular Expression. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Grouping Parts of a Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Useful Regular Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Matching a Pattern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Replacing Text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Trying Out Regular Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
Working with Numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Changing a String to a Number. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Testing for Numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Rounding Numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Formatting Currency Values. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Creating a Random Number. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Dates and Times. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Getting the Month. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Getting the Day of the Week. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Getting the Time. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Creating a Date Other Than Today.. . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Putting It All Together. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Using External JavaScript Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Writing More Efficient JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Putting Preferences in Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Ternary Operator.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
The Switch Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Creating Fast-Loading JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465

Chapter 15: Troubleshooting and Debugging.. . . . . . . . . . . . 467


Top JavaScript Programming Mistakes. . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Non-Closed Pairs.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Quotation Marks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
Using Reserved Words. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
Single Equals in Conditional Statements.. . . . . . . . . . . . . . . . . . . . . . . . 473
Case-Sensitivity.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Incorrect Path to External JavaScript File. . . . . . . . . . . . . . . . . . . . . . . . 474
Incorrect Paths Within External JavaScript Files. . . . . . . . . . . . . . . . . . . . . 474
Disappearing Variables and Functions.. . . . . . . . . . . . . . . . . . . . . . . . . 476
Debugging with Firebug. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
Installing and Turning On Firebug. . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
Viewing Errors with Firebug. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478

table of contents xi
Using console.log() to Track Script Progress. . . . . . . . . . . . . . . . . . . . . . 479
Tutorial: Using the Firebug Console. . . . . . . . . . . . . . . . . . . . . . . . . . . 481
More Powerful Debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Debugging Tutorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489

Appendix A: JavaScript Resources. . . . . . . . . . . . . . . . . . . 497


Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503

xii table of contents


The Missing Credits

About the Author


David Sawyer McFarland is president of Sawyer McFarland
Media, Inc., a web development and training company in
Portland, Oregon. He’s been building websites since 1995,
when he designed his first site—an online magazine for
communication professionals. He’s served as webmaster at
the University of California at Berkeley and the Berkeley
Multimedia Research Center, and oversaw a complete CSS-
driven redesign of Macworld.com.
In addition to building websites, David is also a writer, trainer, and instructor. He’s
taught web design at UC Berkeley Graduate School of Journalism, the Center for
Electronic Art, the Academy of Art College, Ex’Pressions Center for New Media,
and Portland State University. He’s written articles about the web for Practical Web
Design, MX Developer’s Journal, Macworld magazine, and CreativePro.com.
He welcomes feedback about this book by email: missing@sawmac.com. (If you’re
seeking technical help, however, please refer to the sources listed in Appendix A.)

About the Creative Team


Nan Barber (editor) has worked with the Missing Manual series since its inception—
long enough to remember HyperCard stacks.
Holly Bauer (production editor) lives in Ye Olde Cambridge, MA. She’s a produc-
tion editor by day and an avid home cook, prolific DIYer, and mid-century modern
design enthusiast by evening/weekend. Email: holly@oreilly.com.

xiii
Acknowledgements

Carla Spoon (proofreader) is a freelance writer and copy editor. An avid runner, she
works and feeds her tech gadget addiction from her home office in the shadow of
Mount Rainier. Email: carla_spoon@comcast.net.
Angela Howard (indexer) has been indexing for more than 10 years, mostly for
computer books, but occasionally for books on other topics, such as travel, alterna-
tive medicine, and leopard geckos. She lives in California with her husband, daugh-
ter, and two cats.

Acknowledgements
Many thanks to all those who helped with this book, including Shelley Powers and
Steve Suehring, whose watchful eyes saved me from potentially embarrassing mis-
takes. Thanks also to my many students at Portland State University who have sat
through my long JavaScript lectures and struggled through my programming as-
signments—especially the members of Team Futzbit (Combination Pizza Hut and
Taco Bell) for testing the tutorials: Julia Hall, Amber Brucker, Kevin Brown, Josh
Elliott, Tracy O’Connor, and Blake Womack. Also, we all owe a big debt of grati-
tude to John Resig and the jQuery team for creating the best tool yet for making
JavaScript fun.
Finally, thanks to David Pogue for getting me started; Nan Barber for making my
writing sharper and clearer; my wife, Scholle, for putting up with an author’s cranki-
ness; and thanks to my kids, Graham and Kate, because they’re just awesome.

The Missing Manual Series


Missing Manuals are witty, superbly written guides to computer products that don’t
come with printed manuals (which is just about all of them). Each book features
a handcrafted index and cross-references to specific page numbers (not just “see
Chapter 14”).
Recent and upcoming titles include:
• Access 2010: The Missing Manual by Matthew MacDonald
• Buying a Home: The Missing Manual by Nancy Conner
• CSS: The Missing Manual, Second Edition, by David Sawyer McFarland
• Creating a Website: The Missing Manual, Third Edition, by Matthew Mac­Donald
• David Pogue’s Digital Photography: The Missing Manual by David Pogue
• Dreamweaver CS5.5: The Missing Manual by David Sawyer McFarland
• Droid X2: The Missing Manual by Preston Gralla
• Droid 2: The Missing Manual by Preston Gralla
• Excel 2010: The Missing Manual by Matthew MacDonald

xiv the missing credits


The Missing Manual
Series
• Facebook: The Missing Manual, Third Edition, by E.A. Vander Veer
• FileMaker Pro 11: The Missing Manual by Susan Prosser and Stuart Gripman
• Flash CS5.5: The Missing Manual by Chris Grover
• Galaxy Tab: The Missing Manual by Preston Gralla
• Google Apps: The Missing Manual by Nancy Conner
• Google SketchUp: The Missing Manual by Chris Grover
• The Internet: The Missing Manual by David Pogue and J.D. Biersdorfer
• iMovie ’11 & iDVD: The Missing Manual by David Pogue and Aaron Miller
• iPad 2: The Missing Manual by J.D. Biersdorfer
• iPhone: The Missing Manual, Fourth Edition, by David Pogue
• iPhone App Development: The Missing Manual by Craig Hockenberry
• iPhoto ’11: The Missing Manual by David Pogue and Lesa Snider
• iPod: The Missing Manual, Ninth Edition, by J.D. Biersdorfer and David Pogue
• Living Green: The Missing Manual by Nancy Conner
• Mac OS X Snow Leopard: The Missing Manual by David Pogue
• Mac OS X Lion: The Missing Manual by David Pogue
• Microsoft Project 2010: The Missing Manual by Bonnie Biafore
• Motorola Xoom: The Missing Manual by Preston Gralla
• Netbooks: The Missing Manual by J.D. Biersdorfer
• Office 2010: The Missing Manual by Nancy Connor, Chris Grover, and Matthew
MacDonald
• Office 2011 for Macintosh: The Missing Manual by Chris Grover
• Palm Pre: The Missing Manual by Ed Baig
• Personal Investing: The Missing Manual by Bonnie Biafore
• Photoshop CS5.5: The Missing Manual by Lesa Snider
• Photoshop Elements 10: The Missing Manual by Barbara Brundage
• PowerPoint 2007: The Missing Manual by E.A. Vander Veer
• Premiere Elements 8: The Missing Manual by Chris Grover
• QuickBase: The Missing Manual by Nancy Conner
• QuickBooks 2011: The Missing Manual by Bonnie Biafore
• QuickBooks 2012: The Missing Manual by Bonnie Biafore

the missing credits xv


The Missing Manual
Series
• Switching to the Mac: The Missing Manual, Snow Leopard Edition, by David Pogue
• Switching to the Mac: The Missing Manual, Lion Edition, by David Pogue
• Wikipedia: The Missing Manual by John Broughton
• Windows Vista: The Missing Manual by David Pogue
• Windows 7: The Missing Manual by David Pogue
• Word 2007: The Missing Manual by Chris Grover
• Your Body: The Missing Manual by Matthew MacDonald
• Your Brain: The Missing Manual by Matthew MacDonald
• Your Money: The Missing Manual by J. D. Roth

xvi the missing credits


Introduction

T
he Web was a pretty boring place in its early days. Web pages were constructed
from plain old HTML, so they could display information, and that was about
all. Folks would click a link and then wait for a new web page to load. That
was about as interactive as it got.
These days, most websites are almost as responsive as the programs on a desktop
computer, reacting immediately to every mouse click. And it’s all thanks to the subjects
of this book—JavaScript and its sidekick, jQuery.

What Is JavaScript?
JavaScript is a programming language that lets you supercharge your HTML with
animation, interactivity, and dynamic visual effects.
JavaScript can make web pages more useful by supplying immediate feedback. For
example, a JavaScript-powered shopping cart page can instantly display a total cost,
with tax and shipping, the moment a visitor selects a product to buy. JavaScript can
produce an error message immediately after someone attempts to submit a web form
that’s missing necessary information.
JavaScript also lets you create fun, dynamic, and interactive interfaces. For example,
with JavaScript, you can transform a static page of thumbnail images into an animated
slideshow (as you’ll learn how to do on page 314). Or you can do something more
subtle like stuff more information on a page without making it seem crowded by
organizing content into bite-size panels that visitors can access with a simple click of
the mouse (page 301). Or add something useful and attractive, like pop-up tooltips
that provide supplemental information for items on your web page (page 326).

1
What Is JavaScript?

Another one of JavaScript’s main selling points is its immediacy. It lets web pages
respond instantly to actions like clicking a link, filling out a form, or merely moving
the mouse around the screen. JavaScript doesn’t suffer from the frustrating delay
associated with server-side programming languages like PHP, which rely on com-
munication between the web browser and the web server. Because it doesn’t rely on
constantly loading and reloading web pages, JavaScript lets you create web pages that
feel and act more like desktop programs than web pages.
If you’ve visited Google Maps (http://maps.google.com), you’ve seen JavaScript in ac-
tion. Google Maps lets you view a map of your town (or pretty much anywhere else for
that matter), zoom in to get a detailed view of streets and bus stops, or zoom out to get
a birds-eye view of how to get across town, the state, or the nation. While there were
plenty of map sites before Google, they always required reloading multiple web pages
(usually a slow process) to get to the information you wanted. Google Maps, on the
other hand, works without page refreshes—it responds immediately to your choices.
The programs you create with JavaScript can range from the really simple (like pop-
ping up a new browser window with a web page in it) to full-blown web applications
like Google Docs (http://docs.google.com), which let you create presentations, edit
documents, and create spreadsheets using your web browser with the feel of a pro-
gram running directly on your computer.

A Bit of History
Invented by Netscape back in 1995, JavaScript is nearly as old as the web itself. While
JavaScript is well respected today, it has a somewhat checkered past. It used to be
considered a hobbyist’s programming language, used for adding less-than-useful
effects such as messages that scroll across the bottom of a web browser’s status bar
like a stock-ticker, or animated butterflies following mouse movements around the
page. In the early days of JavaScript, it was easy to find thousands of free JavaScript
programs (also called scripts) online, but many of those scripts didn’t work in all web
browsers, and at times even crashed browsers.

Note: JavaScript has nothing to do with the Java programming language. JavaScript was originally
named LiveScript, but the marketing folks at Netscape decided they’d get more publicity if they tried to
associate the language with the then-hot Java. Don’t make the mistake of confusing the two…especially
at a job interview!

In the early days, JavaScript also suffered from incompatibilities between the two
prominent browsers, Netscape Navigator and Internet Explorer. Because Netscape
and Microsoft tried to outdo each other’s browsers by adding newer and (ostensibly)
better features, the two browsers often acted in very different ways, making it difficult
to create JavaScript programs that worked well in both.

2 javascript & jquery: the missing manual


What Is jQuery?

Note: After Netscape introduced JavaScript, Microsoft introduced jScript, their own version of JavaScript
included with Internet Explorer.

Fortunately the worst of those days is nearly gone and contemporary browsers like
Firefox, Safari, Chrome, Opera, and Internet Explorer 9 have standardized much of
the way they handle JavaScript, making it easier to write JavaScript programs that
work for most everyone. (There are still a few incompatibilities among current web
browsers, so you’ll need to learn a few tricks for dealing with cross-browser problems.
You’ll learn how to overcome browser incompatibilities in this book.)
In the past several years, JavaScript has undergone a rebirth, fueled by high-profile
websites like Google, Yahoo, and Flickr, which use JavaScript extensively to create
interactive web applications. There’s never been a better time to learn JavaScript.
With the wealth of knowledge and the quality of scripts being written, you can add
sophisticated interaction to your website—even if you’re a beginner.

Note: JavaScript is also known by the name ECMAScript. ECMAScript is the “official” JavaScript specifica-
tion, which is developed and maintained by an international standards organization called Ecma Interna-
tional: http://www.ecmascript.org/

JavaScript Is Everywhere
JavaScript isn’t just for web pages, either. It’s proven to be such a useful programming
language that if you learn JavaScript you can create Yahoo Widgets and Apple’s
Dashboard Widgets, write programs for the iPhone, and tap into the scriptable fea-
tures of many Adobe programs like Acrobat, Photoshop, Illustrator, and Dream-
weaver. In fact, Dreamweaver has always offered clever JavaScript programmers a
way to add their own commands to the program.
In addition, the programming language for Flash—ActionScript—is based on Java­
Script, so if you learn the basics of JavaScript, you’ll be well prepared to learn Flash
programming.

What Is jQuery?
JavaScript has one embarrassing little secret: writing it is hard. While it’s simpler
than many other programming languages, JavaScript is still a programming lan-
guage. And many people, including web designers, find programming difficult. To
complicate matters further, different web browsers understand JavaScript differ-
ently, so a program that works in, say, Chrome may be completely unresponsive in
Internet Explorer 9. This common situation can cost many hours of testing on dif-
ferent machines and different browsers to make sure a program works correctly for
your site’s entire audience.

introduction 3
HTML: The
Barebones Structure
That’s where jQuery comes in. jQuery is a JavaScript library intended to make
Java­Script programming easier and more fun. A JavaScript library is a complex
JavaScript program that both simplifies difficult tasks and solves cross-browser
problems. In other words, jQuery solves the two biggest headaches with JavaScript—
complexity and the finicky nature of different web browsers.
jQuery is a web designer’s secret weapon in the battle of JavaScript programming.
With jQuery, you can accomplish tasks in a single line of code that would other-
wise take hundreds of lines of programming and many hours of browser testing to
achieve with your own JavaScript code. In fact, an in-depth book solely about Java­
Script would be at least twice as thick as the one you’re holding; and, when you were
done reading it (if you could manage to finish it), you wouldn’t be able to do half of
the things you can accomplish with just a little bit of jQuery knowledge.
That’s why most of this book is about jQuery. It lets you do so much, so easily. An-
other great thing about jQuery is that you can add advanced features to your website
with thousands of easy-to-use jQuery plug-ins. For example, the FancyBox plug-in
(which you’ll meet on page 222) lets you take a simple page of thumbnail graphics
and turn it into an interactive slideshow—all with a single line of programming!
Unsurprisingly, jQuery is used on millions of websites (http://trends.builtwith.com/
javascript/JQuery). It’s baked right into popular content management systems like
Drupal and WordPress. You can even find job listings for “jQuery Programmers”
with no mention of JavaScript. When you learn jQuery, you join a large community
of fellow web designers and programmers who use a simpler and more powerful
approach to creating interactive, powerful web pages.

HTML: The Barebones Structure


JavaScript isn’t much good without the two other pillars of web design—HTML and
CSS. Many programmers talk about the three languages as forming the “layers” of
a web page: HTML provides the structural layer, organizing content like pictures
and words in a meaningful way; CSS (Cascading Style Sheets) provides the presen-
tational layer, making the content in the HTML look good; and JavaScript adds a
behavioral layer, bringing a web page to life so it interacts with web visitors.
In other words, to master JavaScript, you need to have a good understanding of both
HTML and CSS.

Note: For a full-fledged introduction to HTML and CSS, check out Head First HTML with CSS and XHTML
by Elisabeth Freeman and Eric Freeman. For an in-depth presentation of the tricky subject of Cascading
Style Sheets, pick up a copy of CSS: The Missing Manual by David Sawyer McFarland (both O’Reilly).

HTML (Hypertext Markup Language) uses simple commands called tags to define the
various parts of a web page. For example, this HTML code creates a simple web page:

4 javascript & jquery: the missing manual


HTML: The
Barebones Structure
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8>
<title>Hey, I am the title of this web page.</title>
</head>
<body>
Hey, I am some body text on this web page.
</body>
</html>
It may not be exciting, but this example has all the basic elements a web page needs.
This page begins with a single line—the document type declaration, or doctype
for short—that states what type of document the page is and which standards it
conforms to. HTML actually comes in different versions, and you use a different
doctype with each. In this example, the doctype is for HTML5; the doctype for an
HTML 4.01 or XHTML document is longer and also includes a URL that points the
web browser to a file on the Internet that contains definitions for that type of file.
In essence, the doctype tells the web browser how to display the page. The doc-
type can even affect how CSS and JavaScript work. With an incorrect or missing
doctype, you may end up banging your head against a wall as you discover lots of
cross-browser differences with your scripts. If for no other reason, always include a
doctype in your HTML.
There are five types of HTML commonly used today: HTML 4.01 Transitional,
HTML 4.01 Strict, XHTML 1.0 Transitional, XHTML 1.0 Strict, and HTML5 (the
new kid on the block). All five are very much alike, with just slight differences in
how tags are written and which tags and attributes are allowed. Most web page
editing programs add an appropriate doctype when you create a new web page, but
if you want examples of how each is written, you can find templates for the different
types of pages at www.webstandards.org/learn/reference/templates.
It doesn’t really matter which type of HTML you use. All current web browsers un-
derstand each of the five common doctypes and can display web pages using any of
the four document types without problem. Which doctype you use isn’t nearly as
important as making sure you’ve correctly written your HTML tags—a task that’s
helped by validating the page, as described in the box on page 7.

Note: XHTML was once heralded as the next big thing for web designers. Although you’ll still find people
who think you should only use XHTML, the winds of change have turned. The World Wide Web Consor-
tium (W3C) has stopped development of XHTML in favor of HTML5. You can learn more about HTML5 by
picking up a copy of HTML5: The Missing Manual by Matthew MacDonald or HTML5: Up and Running by
Mark Pilgrim (both from O'Reilly).

How HTML Tags Work


In the example on the previous page, as in the HTML code of any web page, you’ll
notice that most commands appear in pairs that surround a block of text or other

introduction 5
HTML: The
Barebones Structure
commands. Sandwiched between brackets, these tags are instructions that tell a web
browser how to display the web page. Tags are the “markup” part of the Hypertext
Markup Language.
The starting (opening) tag of each pair tells the browser where the instruction begins,
and the ending tag tells it where the instruction ends. Ending or closing tags always
include a forward slash (/) after the first bracket symbol (<). For example, the tag
<p> marks the start of a paragraph, while </p> marks its end.
For a web page to work correctly, you must include at least these three tags:
• The <html> tag appears once at the beginning of a web page (after the doctype)
and again (with an added slash) at the end. This tag tells a web browser that the
information contained in this document is written in HTML, as opposed to
some other language. All of the contents of a page, including other tags, appear
between the opening and closing <html> tags.
If you were to think of a web page as a tree, the <html> tag would be its trunk.
Springing from the trunk are two branches that represent the two main parts of
any web page—the head and the body.
• The head of a web page, surrounded by <head> tags, contains the title of the
page. It may also provide other, invisible information (such as search keywords)
that browsers and web search engines can exploit.
In addition, the head can contain information that’s used by the web browser for
displaying the web page and for adding interactivity. You put Cascading Style
Sheets, for example, in the head of the document. The head of the document is
also where you often include JavaScript programming and links to JavaScript files.
• The body of a web page, as set apart by its surrounding <body> tags, contains all
the information that appears inside a browser window: headlines, text, pictures,
and so on.
Within the <body> tag, you commonly find tags like the following:
• You tell a web browser where a paragraph of text begins with a <p> (opening
paragraph tag), and where it ends with a </p> (closing paragraph tag).
• The <strong> tag emphasizes text. If you surround some text with it and its part-
ner tag, </strong>, you get boldface type. The HTML snippet <strong>Warning!
</strong> tells a web browser to display the word “Warning!” in bold type.
• The <a> tag, or anchor tag, creates a hyperlink in a web page. When clicked, a
hyperlink—or link—can lead anywhere on the web. You tell the browser where
the link points by putting a web address inside the <a> tags. For instance, you
might type <a href=“http://www.missingmanuals.com”>Click here!</a>.
The browser knows that when your visitor clicks the words “Click here!” it
should go to the Missing Manual website. The href part of the tag is called an at-
tribute and the URL (the Uniform Resource Locator or web address) is the value.
In this example, http://www.missingmanuals.com is the value of the href attribute.

6 javascript & jquery: the missing manual


CSS: Adding Style to
Web Pages

UP TO SPEED

Validating Web Pages


As mentioned on page 5, a web page’s doctype identifies or not. If there are any errors, the validator tells you what
which type of HTML or XHTML you used to create the web the error is and on which line of the HTML file it occurs.
page. The rules differ subtly depending on type: For ex-
If you use Firefox, you can download the HTML Valida-
ample, unlike HTML 4.01, XHTML doesn’t let you have an
tor plug-in from http://users.skynet.be/mgueury/mozilla.
unclosed <p> tag, and requires that all tag names and at-
This plug-in lets you validate a page directly in your web
tributes be lowercase (<a> not <A>, for example). HTML5
browser; just open a page (even a page directly off of your
includes new tags and lets you use either HTML or XHTML
computer) and the validator will point out any errors in
syntax. Because different rules apply to each variant of
your HTML. There’s a similar plug-in for Safari, called Safari
HTML, you should always validate your web pages.
Validator, which you can find at http://zappatic.net/projects/
An HTML validator is a program that makes sure a web safarivalidator.
page is written correctly. It checks the page’s doctype
Valid HTML isn’t just good form, it also helps to make sure
and then analyzes the code in the page to see whether it
your JavaScript programs work correctly. A lot of JavaScript
matches the rules defined by that doctype. For example,
involves manipulating a web page’s HTML: identifying a
the validator flags mistakes like a misspelled tag name or
particular form field, for example, or placing new HTML
an unclosed tag. The World Wide Web Consortium (W3C),
(like an error message) in a particular spot. In order for
the organization that’s responsible for many of the technol-
JavaScript to access and manipulate a web page, the HTML
ogies used on the web, has a free online validator at http://
must be in proper working order. Forgetting to close a tag,
validator.w3.org. You can copy your HTML and paste it into
using the same ID name more than once, or improperly
a web form, upload a web page, or point the validator to an
nesting your HTML tags can make your JavaScript code
already existing page on the web; the validator then ana-
behave erratically or not at all.
lyzes the HTML and reports back whether the page is valid

CSS: Adding Style to Web Pages


At the beginning of the Web, HTML was the only language you needed to know. You
could build pages with colorful text and graphics and make words jump out using
different sizes, fonts, and colors. But today, web designers turn to Cascading Style
Sheets to add visual sophistication to their pages. CSS is a formatting language that
lets you make text look good, build complex page layouts, and generally add style
to your site.
Think of HTML as merely the language you use to structure a page. It helps iden-
tify the stuff you want the world to know about. Tags like <h1> and <h2> denote
headlines and assign them relative importance: A heading 1 is more important than
a heading 2. The <p> tag indicates a basic paragraph of information. Other tags
provide further structural clues: for example, a <ul> tag identifies a bulleted list (to
make a list of recipe ingredients more intelligible, for example).
CSS, on the other hand, adds design flair to well-organized HTML content, making
it more beautiful and easier to read. Essentially, a CSS style is just a rule that tells a
web browser how to display a particular element on a page. For example, you can

introduction 7
CSS: Adding Style to
Web Pages
create a CSS rule to make all <h1> tags appear 36 pixels tall, in the Verdana font, and
in orange. CSS can do more powerful stuff, too, like add borders, change margins,
and even control the exact placement of a page element.
When it comes to JavaScript, some of the most valuable changes you make to a page
involve CSS. You can use JavaScript to add or remove a CSS style from an HTML
tag, or dynamically change CSS properties based on a visitor’s input or mouse clicks.
You can even animate from the properties of one style to the properties of another
(say, animating a background color changing from yellow to red). For example, you
can make a page element appear or disappear simply by changing the CSS display
property. To animate an item across the screen, you can change the CSS position
properties dynamically using JavaScript.

Anatomy of a Style
A single style that defines the look of one element is a pretty basic beast. It’s essentially
a rule that tells a web browser how to format something—turn a headline blue, draw
a red border around a photo, or create a 150-pixel-wide sidebar box to hold a list of
links. If a style could talk, it would say something like, “Hey, Browser, make this look
like that.” A style is, in fact, made up of two elements: the web page element that the
browser formats (the selector) and the actual formatting instructions (the declaration
block). For example, a selector can be a headline, a paragraph of text, a photo, and so
on. Declaration blocks can turn that text blue, add a red border around a paragraph,
position the photo in the center of the page—the possibilities are endless.

Note: Technical types often follow the lead of the W3C and call CSS styles rules. This book uses the terms
“style” and “rule” interchangeably.

Of course, CSS styles can’t communicate in nice, clear English. They have their own
language. For example, to set a standard font color and font size for all paragraphs
on a web page, you’d write the following:
p { color: red; font-size: 1.5em; }
This style simply says, “Make the text in all paragraphs—marked with <p> tags—red
and 1.5 ems tall.” (An em is a unit or measurement that’s based on a browser’s nor-
mal text size.) As Figure I-1 illustrates, even a simple style like this example contains
several elements:
• Selector. The selector tells a web browser which element or elements on a page
to style—like a headline, paragraph, image, or link. In Figure I-1, the selec-
tor (p) refers to the <p> tag, which makes web browsers format all <p> tags
using the formatting directions in this style. With the wide range of selectors
that CSS offers and a little creativity, you can gain fine control of your pages’
formatting. (Selectors are an important part of using jQuery, so you’ll find a
detailed discussion of them starting on page 129.)

8 javascript & jquery: the missing manual


CSS: Adding Style to
Web Pages
• Declaration Block. The code following the selector includes all the formatting
options you want to apply to the selector. The block begins with an opening
brace ({) and ends with a closing brace (}).
• Declaration. Between the opening and closing braces of a declaration, you add
one or more declarations, or formatting instructions. Every declaration has two
parts, a property and a value, and ends with a semicolon.
• Property. CSS offers a wide range of formatting options, called properties. A
property is a word—or a few hyphenated words—indicating a certain style
effect. Most properties have straightforward names like font-size, margin-top,
and background-color. For example, the background-color property sets—you
guessed it—a background color.

Note: If you need to brush up on your CSS, grab a copy of CSS: The Missing Manual.

• Value. Finally, you get to express your creative genius by assigning a value to
a CSS property—by making a background blue, red, purple, or chartreuse, for
example. Different CSS properties require specific types of values—a color (like
red, or #FF0000), a length (like 18px, 2in, or 5em), a URL (like images/back-
ground.gif), or a specific keyword (like top, center, or bottom).

Selector Declaration block Figure I-1: A style (or rule) is made of


Declaration Declaration two main parts: a selector, which tells
web browsers what to format, and a dec-
p { color:red; font-size:1.5em; } laration block, which lists the formatting
instructions that the browsers use to style
Property Value Property Value the selector.

You don’t need to write a style on a single line as pictured in Figure I-1. Many styles
have multiple formatting properties, so you can make them easier to read by break-
ing them up into multiple lines. For example, you may want to put the selector and
opening brace on the first line, each declaration on its own line, and the closing
brace by itself on the last line, like so:
p {
color: red;
font-size: 1.5em;
}
It’s also helpful to indent properties, with either a tab or a couple of spaces, to visibly
separate the selector from the declarations, making it easy to tell which is which.
And finally, putting one space between the colon and the property value is optional,
but adds to the readability of the style. In fact, you can put as much white space be-
tween the two as you want. For example color:red, color: red, and color : red all work.

introduction 9
Software for
JavaScript
Programming
Software for JavaScript Programming
To create web pages made up of HTML, CSS, and JavaScript, you need nothing more
than a basic text editor like Notepad (Windows) or TextEdit (Mac). But after typing
a few hundred lines of JavaScript code, you may want to try a program better suited
to working with web pages. This section lists some common programs, some free
and some you can buy.

Note: There are literally hundreds of tools that can help you create web pages and write JavaScript
programs, so the following is by no means a complete list. Think of it as a greatest-hits tour of the most
popular programs that JavaScript fans are using today.

Free Programs
There are plenty of free programs out there for editing web pages and style sheets.
If you’re still using Notepad or TextEdit, give one of these a try. Here’s a short list to
get you started:
• Notepad++ (Windows, http://notepad-plus-plus.org) is a coder’s friend. It high-
lights the syntax of JavaScript and HTML code, and lets you save macros and
assign keyboard shortcuts to them so you can automate the process of inserting
the code snippets you use most.
• HTML-Kit (Windows, www.chami.com/html-kit) is a powerful HTML/XHTML
editor that includes lots of useful features, like the ability to preview a web page
directly in the program (so you don’t have to switch back and forth between
browser and editor), shortcuts for adding HTML tags, and a lot more.
• CoffeeCup Free HTML Editor (Windows, www.coffeecup.com/free-editor) is
the free version of the commercial ($49) CoffeeCup HTML editor.
• TextWrangler (Mac, www.barebones.com/products/textwrangler) is free software
that’s actually a pared-down version of BBEdit, the sophisticated, well-known
text editor for the Mac. TextWrangler doesn’t have all of BBEdit’s built-in HTML
tools, but it does include syntax-coloring (highlighting tags and properties in
different colors so it’s easy to scan a page and identify its parts), FTP support (so
you can upload files to a web server), and more.
• Eclipse (Windows, Linux, Mac; www.eclipse.org) is a free, popular choice
amongst Java Developers, but includes tools for working with HTML, CSS,
and JavaScript. A version specifically for JavaScript developers is also available
(www.eclipse.org/downloads/packages/eclipse-ide-javascript-web-developers/
indigor), as well as Eclipse plug-ins to add autocomplete for jQuery (http://​
marketplace.eclipse.org/category/free-tagging/jquery).
• Aptana Studio (Windows, Linux, Mac; www.aptana.org) is a powerful, free
coding environment with tools for working with HTML, CSS, JavaScript, PHP,
and Ruby on Rails.

10 javascript & jquery: the missing manual


About This Book

Commercial Software
Commercial website development programs range from inexpensive text editors to
complete website construction tools with all the bells and whistles:
• EditPlus (Windows, www.editplus.com) is an inexpensive ($35) text editor that
includes syntax-coloring, FTP, auto-completion, and other wrist-saving features.
• CoffeeCup (Windows, www.coffeecup.com) is a combination text and visual
editor ($49). You can either write straight HTML code or use a visual interface
to build your pages.
• textMate (Mac, http://macromates.com) is a darling of Mac programmers. This
text editor ($57) includes many timesaving features for JavaScript programmers,
like “auto-paired characters,” which automatically plops in the second character
of a pair of punctuation marks (for example, the program automatically inserts
a closing parenthesis after you type an opening parenthesis).
• BBEdit (Mac, www.barebones.com/products/bbedit). This much-loved Mac text
editor ($99.99) has plenty of tools for working with HTML, XHTML, CSS,
JavaScript, and more. It includes many useful web building tools and shortcuts.
• Dreamweaver (Mac and Windows, www.adobe.com/products/dreamweaver.html)
is a visual web page editor ($399.) It lets you see how your page looks in a web
browser. The program also includes a powerful text editor for writing JavaScript
programs and excellent CSS creation and management tools. Check out Dream-
weaver CS5.5: The Missing Manual for the full skinny on how to use this power-
ful program.
• Expression Web Designer (Windows, www.microsoft.com/expression/products/
StudioWebPro_Overview.aspx) is Microsoft’s entry in the web design field
($149). It includes many professional web design tools, including excellent
CSS features.

About This Book


Unlike a piece of software such as Microsoft Word or Dreamweaver, JavaScript isn’t
a single product developed by a single company. There’s no support department at
JavaScript headquarters writing an easy-to-read manual for the average web de-
veloper. While you’ll find plenty of information on sites like Mozilla.org (see, for
example, https://developer.mozilla.org/en/JavaScript/Reference) or Ecmascript.org
(www.ecmascript.org/docs.php), there’s no definitive source of information on the
JavaScript programming language.
Because there’s no manual for JavaScript, people just learning JavaScript often don’t
know where to begin. And the finer points regarding JavaScript can trip up even
seasoned web pros. The purpose of this book, then, is to serve as the manual that
should have come with JavaScript. In this book’s pages, you’ll find step-by-step
instructions for using JavaScript to create highly interactive web pages.

introduction 11
About This Book

Likewise, you’ll find good documentation on jQuery at http://docs.jquery.com/


Main_Page. But it’s written by programmers for programmers, and so the explana-
tions are mostly brief and technical. And while jQuery is generally more straightfor-
ward than regular JavaScript programming, this book will teach you fundamental
jQuery principles and techniques so you can start off on the right path when en-
hancing your websites with jQuery.
JavaScript & jQuery: The Missing Manual is designed to accommodate readers who
have some experience building web pages. You’ll need to feel comfortable with HTML
and CSS to get the most from this book, since JavaScript often works closely with
HTML and CSS to achieve its magic. The primary discussions are written for ad-
vanced-beginner or intermediate computer users. But if you’re new to building web
pages, special boxes called Up to Speed provide the introductory information you
need to understand the topic at hand. If you’re an advanced web page jockey, on the
other hand, keep your eye out for similar shaded boxes called Power Users’ Clinic.
They offer more technical tips, tricks, and shortcuts for the experienced computer fan.

Note: This book periodically recommends other books, covering topics that are too specialized or tan-
gential for a manual about using JavaScript. Sometimes the recommended titles are from Missing Manual
series publisher O’Reilly Media—but not always. If there’s a great book out there that’s not part of the
O’Reilly family, we’ll let you know about it.

This Book’s Approach to JavaScript


JavaScript is a real programming language: It doesn’t work like HTML or CSS, and it
has its own set of (often complicated) rules. It’s not always easy for web designers to
switch gears and start thinking like computer programmers, and there’s no one book
that can teach you everything there is to know about JavaScript.
The goal of JavaScript & jQuery: The Missing Manual isn’t to turn you into the next
great programmer (though it might start you on your way). This book is meant to
familiarize web designers with the ins and outs of JavaScript and then move on to
jQuery so that you can add really useful interactivity to a website as quickly and easily
as possible.
In this book, you’ll learn the basics of JavaScript and programming; but just the
basics won’t make for very exciting web pages. It’s not possible in 500 pages to teach
you everything about JavaScript that you need to know to build sophisticated, inter-
active web pages. Instead, much of this book will cover the wildly popular jQuery
JavaScript library, which, as you’ll soon learn, will liberate you from all of the min-
ute, time-consuming details of creating JavaScript programs that run well across
different browsers.
You’ll learn the basics of JavaScript, and then jump immediately to advanced web
page interactivity with a little help—OK, a lot of help—from jQuery. Think of it this

12 javascript & jquery: the missing manual


About This Book

way: You could build a house by cutting down and milling your own lumber, con-
structing your own windows, doors, and doorframes, manufacturing your own tile,
and so on. That “do it yourself ” approach is common to a lot of JavaScript books.
But who has that kind of time? This book’s approach is more like building a house by
taking advantage of already-built pieces and putting them together using basic skills.
The end result will be a beautiful and functional house built in a fraction of the time
it would take you to learn every step of the process.

About the Outline


JavaScript & jQuery: The Missing Manual is divided into five parts, each containing
several chapters:
• Part 1, Getting Started with JavaScript, starts at the very beginning. You’ll learn
the basic building blocks of JavaScript as well as get some helpful tips on com-
puter programming in general. This section teaches you how to add a script to
a web page, store and manipulate information, and add smarts to a program
so it can respond to different situations. You’ll also learn how to communicate
with the browser window, store and read cookies, respond to various events like
mouse clicks and form submissions, and modify the HTML of a web page.
• Part 2, Getting Started with jQuery, introduces the Web’s most popular Java­
Script library, jQuery. Here you’ll learn the basics of this amazing programming
tool that will make you a more productive and capable JavaScript programmer.
You’ll learn how to select and manipulate page elements, add interaction by
making page elements respond to your visitors, and add flashy visual effects
and animations.
• Part 3, Building Web Page Features, provides many real-world examples of
JavaScript in action. You’ll learn how to create pop-up navigation bars and build
an interactive photo gallery. You’ll make your web forms more usable by add-
ing form validation (so visitors can’t submit forms missing information), add a
calendar widget to make selecting dates easy, and change form options based on
selections a web visitor makes. Finally, you’ll create interesting user interfaces
with content sliders, tooltips, and pop-up dialog boxes that look great and func-
tion flawlessly.
• Part 4, Ajax: Communicating with the Web Server, covers the technology that
single-handedly made JavaScript one of the most glamorous web languages to
learn. In this section, you’ll learn how to use JavaScript to communicate with a
web server so your pages can receive information and update themselves based on
information provided by a web server—without having to load a new web page.

Note: You’ll find step-by-step instructions for setting up a web server on your computer so you can take
advantage of the cool technology (discussed in Part 3) on this book’s companion web page. See “Living
Examples” on page 16 for details.

introduction 13
The Very Basics

• Part 5, Troubleshooting, Tips, and Tricks, takes you past the basics, covering
more complex concepts. You’ll learn more about how to use jQuery effectively,
as well as delve into advanced jQuery functions. This part of the book also helps
you when nothing seems to be working: when your perfectly crafted JavaScript
program just doesn’t seem to do what you want (or worse, it doesn’t work at
all!). You’ll learn the most common errors new programmers make as well as
techniques for discovering and fixing bugs in your programs.
At the end of the book, an appendix provides a detailed list of references to aid you
in your further exploration of the JavaScript programming language.

The Very Basics


To use this book, and indeed to use a computer, you need to know a few basics. This
book assumes that you’re familiar with a few terms and concepts:
• Clicking. This book gives you three kinds of instructions that require you to use
your computer’s mouse or trackpad. To click means to point the arrow cursor at
something on the screen and then—without moving the cursor at all—to press
and release the clicker button on the mouse (or laptop trackpad). To right-click
means to do the same thing with the right mouse button. To double-click, of
course, means to click twice in rapid succession, again without moving the cur-
sor at all. And to drag means to move the cursor while pressing the button.

Tip: If you’re on a Mac and don’t have a right mouse button, you can accomplish the same thing by
pressing the Control key as you click with the one mouse button.

When you’re told to �- click something on the Mac, or Ctrl-click something


on a PC, you click while pressing the � or Ctrl key (both of which are near the
space bar).
• Menus. The menus are the words at the top of your screen or window: File, Edit,
and so on. Click one to make a list of commands appear, as though they’re writ-
ten on a window shade you’ve just pulled down.
• Keyboard shortcuts. If you’re typing along in a burst of creative energy, it’s
sometimes disruptive to have to take your hand off the keyboard, grab the
mouse, and then use a menu (for example, to use the Bold command). That’s
why many experienced computer mavens prefer to trigger menu commands by
pressing certain combinations on the keyboard. For example, in the Firefox
web browser, you can press Ctrl-+ (Windows) or �-+ (Mac) to make text on
a web page get larger (and more readable). When you read an instruction like
“press �-B,” start by pressing the �-key; while it’s down, type the letter B, and
then release both keys.

14 javascript & jquery: the missing manual


About the Online
Resources
• Operating-system basics. This book assumes that you know how to open a pro-
gram, surf the web, and download files. You should know how to use the Start
menu (Windows) and the Dock or Apple menu (Macintosh), as well as the
Control Panel (Windows), or System Preferences (Mac OS X).
If you’ve mastered this much information, you have all the technical background
you need to enjoy JavaScript & jQuery: The Missing Manual.

About→These→Arrows
Throughout this book, and throughout the Missing Manual series, you’ll find sen-
tences like this one: “Open the System→Library→Fonts folder.” That’s shorthand for
a much longer instruction that directs you to open three nested folders in sequence,
like this: “On your hard drive, you’ll find a folder called System. Open that. Inside
the System folder window is a folder called Library; double-click it to open it. In-
side that folder is yet another one called Fonts. Double-click to open it, too.”
Similarly, this kind of arrow shorthand helps to simplify the business of choosing
commands in menus, as shown in Figure I-2.

Figure I-2:
In this book, arrow notations help sim-
plify menu instructions. For example,
View→Text Size→Increase is a more
compact way of saying, “From the
View menu, choose Text Size; from the
submenu that then appears, choose
Increase.”

About the Online Resources


This book is designed to get your work onto the web faster and more profession-
ally; it’s only natural, then, that much of the value of this book also lies on the web.
Online, you’ll find example files so you can get some hands-on experience. You can
also communicate with the Missing Manual team and tell us what you love (or hate)
about the book. Head over to www.missingmanuals.com, or go directly to one of the
following sections.

introduction 15
About the Online
Resources

Living Examples
As you read the book’s chapters, you’ll encounter a number of living examples—
step-by-step tutorials that you can build yourself, using raw materials (like graphics
and half-completed web pages) that you can download from either www.sawmac​
.com/js2e or from this book’s Missing CD page at www.missingmanuals.com/cds. You
might not gain very much from simply reading these step-by-step lessons while re-
laxing in your porch hammock, but if you take the time to work through them at the
computer, you’ll discover that these tutorials give you unprecedented insight into the
way professional designers build web pages.
You’ll also find, in this book’s lessons, the URLs of the finished pages, so that you can
compare your work with the final result. In other words, you won’t just see pictures
of JavaScript code in the pages of the book; you’ll find the actual, working web pages
on the Internet.

Registration
If you register this book at oreilly.com, you’ll be eligible for special offers—like
discounts on future editions of JavaScript & jQuery: The Missing Manual. Register-
ing takes only a few clicks. To get started, type www.oreilly.com/register into your
browser to hop directly to the Registration page.

Feedback
Got questions? Need more information? Fancy yourself a book reviewer? On our
Feedback page, you can get expert answers to questions that come to you while read-
ing, share your thoughts on this Missing Manual, and find groups for folks who
share your interest in JavaScript and jQuery. To have your say, go to www.missing
manuals.com/feedback.

Errata
In an effort to keep this book as up to date and accurate as possible, each time we
print more copies, we’ll make any confirmed corrections you’ve suggested. We also
note such changes on the book’s website, so you can mark important corrections into
your own copy of the book, if you like. Go to http://tinyurl.com/jsjqtmm to report an
error and view existing corrections.

16 javascript & jquery: the missing manual


About the Online
Resources

Safari® Books Online


Safari® Books Online is an on-demand digital library that lets you
easily search over 7,500 technology and creative reference books
and videos to find the answers you need quickly.
With a subscription, you can read any page and watch any video from our library
online. Read books on your cellphone and mobile devices. Access new titles before
they’re available for print, and get exclusive access to manuscripts in development
and post feedback for the authors. Copy and paste code samples, organize your fa-
vorites, download chapters, bookmark key sections, create notes, print out pages,
and benefit from tons of other time-saving features.

introduction 17
Part One: Getting Started
1
with JavaScript
Chapter 1: Writing Your First JavaScript Program
Chapter 2: The Grammar of JavaScript
Chapter 3: Adding Logic and Control to Your Programs
chapter
1

Writing Your First


JavaScript Program

B
y itself, HTML doesn’t have any smarts: It can’t do math, it can’t figure out if
someone has correctly filled out a form, and it can’t make decisions based on
how a web visitor interacts with it. Basically, HTML lets people read text, look
at pictures, and click links to move to other web pages with more text and pictures.
In order to add intelligence to your web pages so they can respond to your site’s
visitors, you need JavaScript.
JavaScript lets a web page react intelligently. With it, you can create smart web forms
that let visitors know when they’ve forgotten to include necessary information; you
can make elements appear, disappear, or move around a web page (see Figure 1-1);
you can even update the contents of a web page with information retrieved from a
web server—without having to load a new web page. In short, JavaScript lets you
make your websites more engaging and effective.

21
Introducing
Programming

Figure 1-1: Java­Script


lets web pages respond to
visitors. On Amazon.com,
mousing over the “Gifts
& Wish Lists” link opens
a tab that floats above
the other content on the
page and offers additional
options.

Note: Actually, HTML5 does add some smarts to HTML—including basic form validation. But since not
all browsers support these nifty additions (and because you can do a whole lot more with forms and
JavaScript), you still need JavaScript to build the best, most user-friendly and interactive forms. You can
learn more about HTML5 and web forms in Mark Pilgrim’s HTML5: Up and Running (O’Reilly).

Introducing Programming
For a lot of people, the term “computer programming” conjures up visions of super-
intelligent nerds hunched over keyboards, typing nearly unintelligible gibberish for
hours on end. And, honestly, some programming is like that. Programming can
seem like complex magic that’s well beyond the average mortal. But many program-
ming concepts aren’t difficult to grasp, and as programming languages go, JavaScript
is relatively friendly to nonprogrammers.
Still, JavaScript is more complex than either HTML or CSS, and programming often
is a foreign world to web designers; so one goal of this book is to help you think more
like a programmer. Throughout this book, you’ll learn fundamental programming
concepts that apply whether you’re writing JavaScript, ActionScript, or even writing
a desktop program using C++. More importantly, you’ll learn how to approach a
programming task so you’ll know exactly what you want to do before you start adding
JavaScript to a web page.
Many web designers are immediately struck by the strange symbols and words used
in JavaScript. An average JavaScript program is sprinkled with symbols ({ } [ ] ; , ()

22 javascript & jquery: the missing manual


Introducing
Programming
!=) and full of unfamiliar words (var, null, else if). It’s like staring at a foreign lan-
guage, and in many ways, learning a programming language is a lot like learning
another language. You need to learn new words, new punctuation, and understand
how to put them together so you can communicate successfully.
In fact, every programming language has its own set of key words and characters,
and its own set of rules for putting those words and characters together—the
language’s syntax. Learning JavaScript’s syntax is like learning the vocabulary and
grammar of another language. You’ll need to memorize the words and rules of the
language (or at least keep this book handy as a reference). When learning to speak
a new language, you quickly realize that placing an accent on the wrong syllable can
make a word unintelligible. Likewise, a simple typo or even a missing punctuation
mark can prevent a JavaScript program from working, or trigger an error in a web
browser. You’ll make plenty of mistakes as you start to learn to program—that’s just
the nature of programming.

UP TO SPEED

The Client Side vs. the Server Side


JavaScript is a client-side language, which (in English) Flash is another plug-in based technology that offers so-
means that it works inside a web browser. The alternative phisticated animation, video, sound, and lots of interactive
type of web programming language is called a server-side potential. In fact, it’s sometimes hard to tell if an interactive
language, which you’ll find in pages built around PHP, web page is using JavaScript or Flash. For example, Google
.NET, ASP, ColdFusion, Ruby on Rails, and other web server Maps could also be created in Flash (in fact, Yahoo Maps
technologies. Server-side programming languages, as the was at one time a Flash application, until Yahoo recreated
name suggests, run on a web server. They can exhibit a it using JavaScript). A quick way to tell the difference: Right-
lot of intelligence by accessing databases, processing credit click on the part of the page that you think might be Flash
cards, and sending email around the globe. The problem (the map itself, in this case); if it is, you’ll see a pop-up
with server-side languages is that they require the web menu that includes “About the Flash Player.”
browser to send requests to the web server, forcing visitors
Ajax, which you’ll learn about in Part 4 of this book, brings
to wait until a new page arrives with new information.
both client-side and server-side together. Ajax is a method
Client-side languages, on the other hand, can react imme- for using JavaScript to talk to a server, retrieve informa-
diately and change what a visitor sees in his web browser tion from the server, and update the web page without the
without the need to download a new page. Content can need to load a new web page. Google Maps uses this tech-
appear or disappear, move around the screen, or automati- nique to let you move around a map without forcing you
cally update based on how a visitor interacts with the page. to load a new web page.
This responsiveness lets you create websites that feel more
In truth, JavaScript can also be a server-side programming
like desktop programs than static web pages. But JavaScript
language. For example, the node.js web server (http://
isn’t the only client-side technology in town. You can also
nodejs.org/) uses JavaScript as a server-side programming
use plug-ins to add programming smarts to a web page.
language to connect to a database, access the web server’s
Java applets are one example. These are small programs,
file system, and perform many other tasks on a web server.
written in the Java programming language, that run in a
This book doesn’t discuss that aspect of JavaScript pro-
web browser. They also tend to start up slowly and have
gramming, however.
been known to crash the browser.

chapter 1: writing your first javascript program 23


Introducing
Programming
At first, you’ll probably find JavaScript programming frustrating—you’ll spend a lot
of your time tracking down errors you made when typing the script. Also, you might
find some of the concepts related to programming a bit hard to follow at first. But
don’t worry: If you’ve tried to learn JavaScript in the past and gave up because you
thought it was too hard, this book will help you get past the hurdles that often trip
up folks new to programming. (And if you do have programming experience, this
book will teach you JavaScript’s idiosyncrasies and the unique concepts involved in
programming for web browsers.)
In addition, this book isn’t just about JavaScript—it’s also about jQuery, the world’s
most popular JavaScript library. jQuery makes complex JavaScript programming
easier…much easier. So with a little bit of JavaScript knowledge and the help of
jQuery, you’ll be creating sophisticated, interactive websites in no time.

What’s a Computer Program?


When you add JavaScript to a web page, you’re writing a computer program. Grant-
ed, most JavaScript programs are much simpler than the programs you use to read
email, retouch photographs, and build web pages. But even though JavaScript pro-
grams (also called scripts) are simpler and shorter, they share many of the same
properties of more complicated programs.
In a nutshell, any computer program is a series of steps that are completed in a des-
ignated order. Say you want to display a welcome message using the name of the
person viewing a web page: “Welcome, Bob!” There are several things you’d need to
do to accomplish this task:
1. Ask the visitor’s name.
2. Get the visitor’s response.
3. Print (that is, display) the message on the web page.
While you may never want to print a welcome message on a web page, this example
demonstrates the fundamental process of programming: Determine what you want
to do, then break that task down into each step that’s necessary to get it done. Every
time you want to create a JavaScript program, you must go through the process of
determining the steps needed to achieve your goal. Once you know the steps, you’re
ready to write your program. In other words, you’ll translate your ideas into pro-
gramming code—the words and characters that make the web browser behave how
you want it to.

24 javascript & jquery: the missing manual


How to Add
JavaScript to a Page

FREQUENTLY ASKED QUESTION

Compiled vs. Scripting Languages


JavaScript is called a scripting language. I’ve heard this A scripting language, on the other hand, is only compiled
term used for other languages like PHP and ColdFusion as when an interpreter (another program that can convert the
well. What’s a scripting language? script into something a computer can understand) reads it.
In the case of JavaScript, the interpreter is built into the web
Most of the programs running on your computer are written
browser. So when your web browser reads a web page
using languages that are compiled. Compiling is the process
with a JavaScript program in it, the web browser translates
of creating a file that will run on a computer by translating
the JavaScript into something the computer understands.
the code a programmer writes into instructions that a com-
As a result, a scripting language operates more slowly than
puter can understand. Once a program is compiled, you
a compiled language, since every time it runs, the program
can run it on your computer, and since a compiled program
must be translated for the computer. Scripting languages
has been converted directly to instructions a computer un-
are great for web developers: Scripts are generally much
derstands, it will run faster than a program written with a
smaller and less complex than desktop programs, so the
scripting language. Unfortunately, compiling a program is
lack of speed isn’t as important. In addition, since they
a time-consuming process: You have to write the program,
don’t require compiling, creating and testing programs that
compile it, and then test it. If the program doesn’t work, you
use a scripting language is a much faster process.
have to go through the whole process again.

How to Add JavaScript to a Page


Web browsers are built to understand HTML and CSS and convert those languages
into a visual display on the screen. The part of the web browser that understands
HTML and CSS is called the layout or rendering engine. But most browsers also
have something called a JavaScript interpreter. That’s the part of the browser that
understands JavaScript and can execute the steps of a JavaScript program. Since the
web browser is usually expecting HTML, you must specifically tell the browser when
JavaScript is coming by using the <script> tag.
The <script> tag is regular HTML. It acts like a switch that in effect says “Hey, web
browser, here comes some JavaScript code; you don’t know what to do with it, so
hand it off to the JavaScript interpreter.” When the web browser encounters the clos-
ing </script> tag, it knows it’s reached the end of the JavaScript program and can get
back to its normal duties.
Much of the time, you’ll add the <script> tag in the <head> portion of the web page
like this:

chapter 1: writing your first javascript program 25


How to Add
JavaScript to a Page
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/
html4/strict.dtd">
<html>
<head>
<title>My Web Page</title>
<script type="text/javascript">

</script>
</head>
The <script> tag’s type attribute indicates the format and the type of script that fol-
lows. In this case, type=“text/javascript” means the script is regular text (just like
HTML) and that it’s written in JavaScript.
If you’re using HTML5, life is even simpler. You can skip the type attribute entirely:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>My Web Page</title>
<script>

</script>
</head>
In fact, web browsers let you leave out the type attribute in HTML 4.01 and XHTML
1.0 files as well—the script will run the same; however, your page won’t validate
correctly without the type attribute (see the box on page 7 for more on validation).
This book uses HTML5 for the doctype, but the JavaScript code will be the same and
work the same for HTML 4.01, and XHTML 1.
You then add your JavaScript code between the opening and closing <script> tags:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<head>
<title>My Web Page</title>
<script>
alert('hello world!');
</script>
</head>
You’ll find out what this JavaScript actually does in a moment. For now, turn your
attention to the opening and closing <script> tags. To add a script to your page,
start by inserting these tags. In many cases, you’ll put the <script> tags in the page’s
<head> in order to keep your JavaScript code neatly organized in one area of the
web page.
However, it’s perfectly valid to put <script> tags anywhere inside the HTML of the
page. In fact, as you’ll see later in this chapter, there’s a JavaScript command that lets
you write information directly into a web page. Using that command, you place the
<script> tags in the location on the page (somewhere inside the body) where you
want the script to write its message. It’s even common to put <script> tags just below

26 javascript & jquery: the missing manual


How to Add
JavaScript to a Page
the closing </body> tag—this approach makes sure the page is loaded and the visitor
sees it before running any JavaScript.

External JavaScript Files


Using the <script> tag as discussed in the previous section lets you add JavaScript
to a single page. But many times you’ll create scripts that you want to share with all
of the pages on your site. For example, you might use a JavaScript program to add
animated, drop-down navigation menus to a web page. You’ll want that same fancy
navigation bar on every page of your site, but copying and pasting the same Java­
Script code into each page of your site is a really bad idea for several reasons.
First, it’s a lot of work copying and pasting the same code over and over again, espe-
cially if you have a site with hundreds of pages. Second, if you ever decide to change
or enhance the JavaScript code, you’ll need to locate every page using that Java­
Script and update the code. Finally, since all of the code for the JavaScript program
would be located in every web page, each page will be that much larger and slower
to download.
A better approach is to use an external JavaScript file. If you’ve used external CSS
files for your web pages, this technique should feel familiar. An external JavaScript
file is simply a text file that ends with the file extension .js—navigation.js, for ex-
ample. The file only includes JavaScript code and is linked to a web page using the
<script> tag. For example, to add a JavaScript file named navigation.js to your home
page, you might write the following:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>My Web Page</title>
<script src="navigation.js"></script>
</head>
The src attribute of the <script> tag works just like the src attribute of an <img> tag,
or an <a> tag’s href attribute. In other words, it points to a file either in your website
or on another website (see the box on the next page).

Note: When adding the src attribute to link to an external JavaScript file, don’t add any JavaScript code
between the opening and closing <script> tags. If you want to link to an external JavaScript file and add
custom JavaScript code to a page, use a second set of <script> tags. For example:

<script src="navigation.js"></script>
<script >
alert('Hello world!');
</script>

chapter 1: writing your first javascript program 27


How to Add
JavaScript to a Page

UP TO SPEED

URL Types
When attaching an external JavaScript file to a web page, the about folder, while the /scripts/site.js means go to the
you need to specify a URL for the src attribute of the scripts folder and get the file site.js.
<script> tag. A URL or Uniform Resource Locator is a
Here are some tips on which URL type to use:
path to a file located on the web. There are three types of
paths: absolute path, root-relative path, and document- • If you’re pointing to a file that’s not on the same serv-
relative path. All three indicate where a web browser can er as the web page, you must use an absolute path.
find a particular file (like another web page, a graphic, or It’s the only type that can point to another website.
a JavaScript file). • Root-relative paths are good for JavaScript files stored
on your own site. Since they always start at the root
An absolute path is like a postal address—it contains all the
folder, the URL for a JavaScript file will be the same
information needed for a web browser located anywhere
for every page on your website, even when web
in the world to find the file. An absolute path includes
pages are located in folders and subfolders on your
http://, the hostname, and the folder and name of the file.
site. However, root-relative paths don’t work unless
For example: http://www.cosmofarmer.com/scripts/site.js.
you’re viewing your web pages through a web server—
A root-relative path indicates where a file is located rela- either your web server out on the Internet, or a web
tive to a site’s top-level folder—the site’s root folder. A root- server you’ve set up on your own computer for test-
relative path doesn’t include http:// or the domain name. It ing purposes. In other words, if you’re just opening
begins with a / (slash) indicating the site’s root folder—the a web page off your computer using the browser’s
folder the home page is in. For example, /scripts/site.js File→Open command, the web browser won’t be
indicates that the file site.js is located inside a folder named able to locate, load, or run JavaScript files that are
scripts, which is itself located in the site’s top-level folder. attached using a root-relative path.
An easy way to create a root-relative path is to take an • Document-relative paths are the best when you’re
absolute path and strip off the http:// and the host name. designing on your own computer without the aid of a
For example, http://www.sawmac.com/index.html written web server. You can create an external JavaScript file,
as a root-relative URL is /index.html. attach it to a web page, and then check the JavaScript
A document-relative path specifies the path from the web in a web browser simply by opening the web page off
page to the JavaScript file. If you have multiple levels of your hard drive. Document-relative paths work fine
folders on your website, you’ll need to use different paths when moved to your actual, living, breathing website
to point to the same JavaScript file. For example, sup- on the Internet, but you’ll have to rewrite the URLs
pose you have a JavaScript file named site.js located in a to the JavaScript file if you move the web page to
folder named scripts in your website’s main directory. The another location on the server. In this book, we’ll be
document-relative path to that file will look one way for using document-relative paths, since they will let you
the home page—scripts/site.js—but for a page located in- follow along and test the tutorials on your own com-
side a folder named about, the path to the same file would puter without a web server.
be different; ../scripts/site.js—the ../ means climb up out of

You can (and often will) attach multiple external JavaScript files to a single web
page. For example, you might have created one external JavaScript file that controls
a drop-down navigation bar, and another that lets you add a nifty slideshow to a
page of photos (you’ll learn how to do that on page 222). On your photo gallery page,
you’d want to have both JavaScript programs, so you’d attach both files.

28 javascript & jquery: the missing manual


Your First JavaScript
Program
In addition, you can attach external JavaScript files and add a JavaScript program to
the same page like this:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>My Web Page</title>
<script src="navigation.js"></script>
<script src="slideshow.js"></script>
<script>
alert('hello world!');
</script>
</head>
Just remember that you must use one set of opening and closing <script> tags for
each external JavaScript file. You’ll create an external JavaScript file in the tutorial
that starts on page 33.
You can keep external JavaScript files anywhere inside your website’s root folder (or
any subfolder inside the root). Many web developers create a special directory for
external JavaScript files in the site’s root folder: common names are js (meaning
JavaScript) or libs (meaning libraries).

Note: Sometimes the order in which you attach external JavaScript files matters. As you’ll see later in this
book, sometimes scripts you write depend upon code that comes from an external file. That’s often the
case when using JavaScript libraries (JavaScript code that simplifies complex programming tasks). You’ll
see an example of a JavaScript library in action in the tutorial on page 33.

Your First JavaScript Program


The best way to learn JavaScript programming is by actually programming. Through-
out this book, you’ll find hands-on tutorials that take you step-by-step through the
process of creating JavaScript programs. To get started, you’ll need a text editor (see
page 10 for recommendations), a web browser, and the exercise files located at
www.sawmac.com/js2e (see the following Note for complete instructions).

Note: The tutorials in this chapter require the example files from this book’s website, www.sawmac.com/
js2e/. Click the “Download tutorials” link to download them. (The tutorial files are stored as a single Zip file.)
Windows users should download the Zip file and double-click it to open the archive. Click the Extract All
Files option, and then follow the instructions of the Extraction Wizard to unzip the files and place them
on your computer. Mac users, just double-click the file to decompress it. After you’ve downloaded and
decompressed the files, you should have a folder named MM_JAVASCRIPT2E on your computer, contain-
ing all of the tutorial files for this book.

To get your feet wet and provide a gentle introduction to JavaScript, your first program
will be very simple:

chapter 1: writing your first javascript program 29


Your First JavaScript
Program
1. In your favorite text editor, open the file hello.html.
This file is located in the chapter01 folder in the MM_JAVASCRIPT2E folder
you downloaded from www.sawmac.com/js2e. It’s a very simple HTML page,
with an external cascading style sheet to add a little visual excitement.
2. Click in the empty line just before the closing </head> tag and type:
<script>
This code is actually HTML, not JavaScript. It informs the web browser that the
stuff following this tag is JavaScript.
3. Press the Return key to create a new blank line, and type:
alert('hello world');
You’ve just typed your first line of JavaScript code. The JavaScript alert() func-
tion is a command that pops open an Alert box and displays the message that
appears inside the parentheses—in this case, hello world. Don’t worry about
all of the punctuation (the parentheses, quotes, and semicolon) just yet. You’ll
learn what they do in the next chapter.
4. Press the Return key once more, and type </script>. The code should now
look like this:
<link href="../_css/site.css" rel="stylesheet">
<script>
alert('hello world');
</script>
</head>
In this example, the stuff you just typed is shown in boldface. The two HTML
tags are already in the file; make sure you type the code exactly where shown.
5. Launch a web browser and open the hello.html file to preview it.
A JavaScript Alert box appears (see Figure 1-2). Notice that the page is blank
when the alert appears. (If you don’t see the Alert box pictured in Figure 1-2,
you probably mistyped the code listed in the previous steps. Double-check your
typing and read the following Note.)

Figure 1-2: The JavaScript


Alert box is a quick way to grab
someone’s attention. It’s one
of the simplest JavaScript com-
mands to learn and use.

30 javascript & jquery: the missing manual


Writing Text on a
Web Page
6. Click the Alert box’s OK button to close it.
When the Alert box disappears, the web page appears in the browser window.

Tip: When you first start programming, you’ll be shocked at how often your JavaScript programs don’t
seem to work…at all. For new programmers, the most common cause of nonfunctioning programs is
simple typing mistakes. Always double-check to make sure you spelled commands (like alert in the first
script) correctly. Also, notice that punctuation frequently comes in pairs (the opening and closing paren-
theses, and single-quote marks from your first script, for example). Make sure you include both opening
and closing punctuation marks when they’re required.

Although this first program isn’t earth-shatteringly complex (or even that in-
teresting), it does demonstrate an important concept: A web browser will run a
JavaScript program the moment it reads in the JavaScript code. In this example,
the alert() command appeared before the web browser displayed the web page,
because the JavaScript code appeared before the HTML in the <body> tag. This
concept comes into play when you start writing programs that manipulate the
HTML of the web page—as you’ll learn in Chapter 3.

Note: Internet Explorer (IE) doesn’t like to run JavaScript programs contained in web pages that you open
directly off your hard drive, for fear that the JavaScript program might do something harmful. So when
you try to preview the tutorial files for this book in Internet Explorer, you’ll see a message saying that IE
has blocked the script. Click “Allow blocked content” to see the program run. This annoying behavior only
applies to web pages you preview from your computer, not from files you put up on a web server. When
following along with the tutorials in this book, it’s better to preview pages in a different web browser like
Firefox, Chrome, or Safari, so you can avoid having to hit the “Allow blocked content” button each time
you view your pages.

Writing Text on a Web Page


The last script popped up a dialog box in the middle of your monitor. What if you
want to print a message directly onto a web page using JavaScript? There are many
ways to do so, and you’ll learn some sophisticated techniques later in this book.
However, you can achieve this simple goal with a built-in JavaScript command, and
that’s what you’ll do in your second script:
1. In your text editor, open the file hello2.html.
While <script> tags usually appear in the <head> of a web page, you can put
them and JavaScript programs directly in the body of the web page.
2. Directly below <h1>Writing to the document window</h1>, type the follow-
ing code:
<script>
document.write('<p>Hello world!</p>');
</script>

chapter 1: writing your first javascript program 31


Writing Text on a
Web Page
Like the alert() function, document.write() is a JavaScript command that literal-
ly writes out whatever you place between the opening and closing parentheses.
In this case, the HTML <p>Hello world!</p> is added to the page: a paragraph
tag and two words.
3. Save the page, and open it in a web browser.
The page opens and the words “Hello world!” appear below the red headline
(see Figure 1-3).

Figure 1-3:
Wow. This script may
not be something to
“document.write”
home about—ha,
ha, JavaScript
humor—but it does
demonstrate that you
can use JavaScript
to add content to a
web page, a trick
that comes in handy
when you want to
display messages
(like “Welcome back
to the site, Dave”)
after a web page has
downloaded.

Note: The tutorial files you downloaded also include the completed version of each tutorial. If you can’t
seem to get your JavaScript working, compare your work with the file that begins with complete_ in the
same folder as the tutorial file. For example, the file complete_hello2.html contains a working version of
the script you added to file hello2.html.

The two scripts you just created may leave you feeling a little underwhelmed with
JavaScript…or this book. Don’t worry. It’s important to start out with a full under-
standing of the basics. You’ll be doing some very useful and complicated things us-
ing JavaScript in just a few chapters. In fact, in the remainder of this chapter you’ll
get a taste of some of the advanced features you’ll be able to add to your web pages
after you’ve worked your way through the first two parts of this book.

32 javascript & jquery: the missing manual


Exploring the Variety of Random
Documents with Different Content
It will be sufficient here to point out as briefly as possible those
sources which are indicated either clearly or with high probability as
lying behind his narrative of the war and its immediate prelude:—
1. The historian’s personal observation and personal inquiry;
2. Records, official and semi-official;
3. Tradition [some preserved in previous authors].
Under the heading of personal observations may be included⁠—
(a) His topographical inquiries.
(b) His inquiries from persons who had taken part in or had
witnessed events.

Among records, the following sources may be suggested:⁠—


(a) Inscriptions set up in various cities;
(b) (Probably) official lists other than inscriptions;
(c) Records of oracular responses.

The traditions, of which he manifestly made important use, are of


great variety of origin. Sometimes he mentions their source; more
frequently the nature of his information clearly indicates it.
(a) Pan-Hellenic, or Patriotic Greek;
(b) Athenian (Pan-Athenian; Aristocratic);
(c) Spartan (Official; Popular);
(d) Argive;
(e) Arcadian;
(f) Sicilian;
(g) Macedonian;
(h) Asiatic Dorian;
(i) Ionian;
(k) (Possibly) Persian sources;
(l) Delphic.

This list, long as it is, is absolutely confined to the sources for the
story of the war, and that, too, of its main incidents. Were the
sources for the history of Greece before the opening of the fifth
century, for the non-Hellenic history, or even for minor incidents of
the war, to be taken into consideration, their discussion would extend
to many chapters.
The most remarkable general characteristic about this aspect of
his work is the composite, sometimes extremely composite, nature of
the sources employed in drawing up the account of any single one of
the main incidents. A second characteristic, hardly less remarkable,
is that those parts of his work whose truth is most conspicuously
demonstrable originate in the majority of cases in the historian’s
personal observation and personal inquiry.

Autopsy, and
The most noticeable examples of the accuracy of
the evidence his personal observation, and of the diligence and
of eye- care of his inquiries from persons who were present at
witnesses.
events, is afforded by the correctness with which he
describes the topography of Thermopylæ and Platæa, and the close
agreement of the incidents of those battles as recorded by him with
the nature and accidents of the ground at the present day. There is
no single statement of pure fact in his accounts of those battles upon
which suspicion is thrown by a minute examination of the areas
within which they were fought. The majority of them are positively
capable of proof by the results of such an examination. The manifest
errors in these two accounts do not lie in statement of fact, but in
statement of motive, and are fully explicable by the circumstances
under which the story was told. In neither case does he produce any
evidence that he was able to get information as to the motives which
influenced those in command. The story of the fighting in both cases
is a soldier’s story. The details of the first two days of the defence of
Thermopylæ were derived from some one who was present at, or a
spectator of, the fight, of which there were many survivors. Those of
the final scene are of the same character, though in that case it is
more difficult to conjecture who was the informant. From certain
indications in the story, it seems that parts of it
AUTOPSY AND
TOPOGRAPHY.
at any rate may have been derived from some
one who viewed it from the Persian side,
possibly some Malian who had been temporarily impressed as a
servant, and with whom Herodotus conversed when he visited the
spot in later years. Such are the details (vii. 208) with regard to some
of the Lacedæmonians being hidden from view of the Persian scout
by the interposition of the wall, and some of the information given
with reference to Epialtes (vii. 213). It is quite beyond question that
Herodotus had traversed the ground. His topographical information
can be followed in detail by any one who visits the region at the
present day.
The only uncertainty concerns the exact sites of one or two places
which he mentions outside the area of fighting, such as the
Amphiktyonic temple; but even these are identifiable with high
probability; and it is the use of the spade, not Herodotus’ information,
which is wanting.
The rest of his information with regard to Thermopylæ, with the
sole exception of the copies of the inscriptions on the monuments, is
232
traditional in origin, emanating from Sparta.
Artemisium he may have seen in the distance in the course of a
land journey from the north. The knowledge which he displays of
Halos, in his account of Xerxes’ visit to the place, renders it probable
that he had traversed the route which leads round the east end of
Othrys on to the Malian plain, and in going that way he would pass in
full view of Aphetæ and Artemisium. His topographical description of
these places is, in so far as it is called for, accurate enough. That is,
however, the only portion of the Artemisium story which can be set
down to aught of the nature of personal examination. Nor, indeed,
can any part of that story be safely attributed to the evidence of an
eye-witness of events. The list of the contingents of the Greek fleet
may be taken from official records of some sort; the rest of the story
seems to be drawn from tradition.
The tale of Salamis is, perhaps, the most extraordinary in the
whole of his history. There can be little doubt that when he wrote it
he had in his possession notes of information given him by some
one who was present at the battle. Probably he never compiled its
history of the battle until some years after he had taken the notes, at
a time when his informant was not within his reach, possibly dead
and gone. He must have known the topography of the strait; he
could hardly have lived in Athens without doing so.
How did he come to make the serious error which he undoubtedly
did make? There may be differences of opinion as to the nature of
the error, still more as to its cause; but as to the existence of it the
topographical evidence, as well as the contemporary account of the
eye-witness Æschylus, leave no reasonable doubt. The mistake
does not appear, in so far as can be judged, to have existed in his
original information. His account, despite the confusion inevitable to
the nature of his mistake, points to its being founded on evidence
which may have been in all essential particulars in accord with that
of Æschylus and Diodorus. The matter has already been discussed
at length in reference to the battle itself. Suffice it now to say that the
most probable explanation of it is that, using his notes of information
some time after they had been given him, he mistimed a movement
mentioned in them, and by so doing threw his narrative out of gear.
In the Salamis story, as elsewhere, the traditional element is
present in various forms. As in the case of Artemisium, the list of the
ships may be founded upon an official basis.
The story of Platæa is, perhaps, the most remarkable that he
wrote. How he ever arrived at the truth with regard to that scene of
confused fighting must excite the wonder of every student of history.
It is plain that he was peculiarly well satisfied
FACTS AND
JUDGMENTS.
with his evidence, for he was not in the habit of
treating at length incidents whose description
rested on testimony with which he was dissatisfied, however
important these incidents might be. His account of Marathon affords
proof of that; and there other ominous silences in his narrative which
can only have been due to lack of reliable information. His
topographical evidence on Platæa is undoubtedly due to autopsy.
Not merely are his direct statements on the subject marvellously
correct; but the whole of the topography implied in his account of the
many incidents of the battle is marvellously correct also. His
information was manifestly derived from one who had fought at
Platæa; and the character of the story is such as to render it possible
that he not merely visited the scene of it himself, but visited in
company with one who had fought there. His account exemplifies in
a peculiar way both his excellences and his limitations as a military
historian. His own diligent inquiry led him to make the best use
possible of the evidence at his command; but that evidence was not
obtained from one who was conversant with the plans of those who
directed the operations, nor had the historian himself such
knowledge and experience as would enable him to form sound
inductions as to the nature of those plans from information of the
kind which was at his disposal.
The traditional element in his account of Platæa is probably far
less in proportion than that in any one of the longer sections of his
history. Of official record only the list of the Greek contingents shows
probable traces.
Such are the major parts of his history in which the evidence of
autopsy on his part, or on the part of his sources of information, is
most strikingly displayed.
One minor passage, that relating to Xerxes’ visit to the vale of
Tempe, must be mentioned. The considerations on the physical
geography of Thessaly, which are put into the mouth of the Great
King, are almost certainly those of the historian himself, derived from
his personal knowledge of the region. This view is further supported
by the remark he makes on his own authority in reference to the
withdrawal of the Greek force from that region, that he believes it
was due to the discovery that Tempe was not the only pass into the
country from the north.
With regard to the other two great battle-grounds of this period,
the evidence of autopsy is doubtful Herodotus’ account of Marathon
makes it probable that he had not seen the ground. His account of
the battle, such as it is, is marked by certain mistaken deductions,
probably his own, resting on a basis of misinformation. The
remainder of it is obviously traditional in origin.
Whether Herodotus had ever seen the ground at Mykale is very
doubtful. He certainly had never examined it in detail. It is, however,
quite possible that some of his information with regard to it was
drawn from an eye-witness.

Oracles.
Mention has already been made of certain traces of
the use of official records of a secular origin. It now
remains to consider those oracular responses, whose actual wording
in their official written form came under his notice, whether at the
place at which they were delivered, or in the city to which they were
given. The great difficulty is to determine whether, in the individual
cases in which he quotes oracles, his quotation is drawn from an
official version, or from a version accepted by tradition. Positive
cases of the latter mode of quotation are more easy to recognize
than positive cases of the former; though in nearly all cases alike he
gives what purports to be, and may be, the actual wording of the
response. Nevertheless, the two kinds of quotation demand that the
material quoted, even if identical in form, should be regarded as
coming under two different classes of evidence. It must not be
necessarily assumed that an oracle copied from an official record at
Delphi is better historical evidence than one preserved in the
memory of those to whom it was delivered. It is too probable that the
opposite is the case. There are many strong reasons for the
suspicion that in certain instances the hand of the editor brought the
record up to date by alterations and additions made in the light of
after-events. The oracles relative to Salamis are a case in point.
Delphi did no doubt possess sources of
ORACLES.
information with regard to Greek politics
generally, which rendered it able to give very useful advice to those
who consulted it; but it is impossible to believe that either at Delphi,
or anywhere else, the course of the war could have been so far
calculated before the actual struggle began, as that the
circumstances which made it so imperative to fight at Salamis should
have been foreseen.
It is in the history of the period at which apparently this oracle was
delivered, when the Greek states to which the council of defence had
appealed for help were making up their minds what attitude to adopt
in the coming war, that Herodotus makes most use of the evidence
of oracles. There is no reason, save in the case of the Salamis
oracle above mentioned, to suspect that those which he quotes are
in aught but their original form. They show that Delphi had a definite
policy at the time, founded upon the conviction that Athens, and
Athens alone, was the goal of the Persian expedition; and even after
the war was over Delphi might have argued with some show of
reason, though not on the solid basis of fact, that, had its advice
been followed, its conviction would have turned out true.
One other very important oracle quoted by Herodotus with
reference to the history of the war, is that which was alleged to have
brought about the self-sacrifice of Leonidas. From the way in which
the historian mentions it, it is obvious that he did not draw it from any
source independent of the tradition of the battle, to which, indeed, it
supplied the main motive.

Traditions.
It is often very difficult to trace with anything
approaching certainty the exact source of the various
traditions which Herodotus followed in different minor sections of his
history. In some cases it is only possible to make a guess at their
origin; and a discussion of them, not in itself very profitable, is but
too apt to lead to even less profitable results. It is quite certain, as
has been already said, that in many parts of his narrative he
combined information of very diverse origin and of very various
value.
A statement in a sentence in the midst of a long passage
oftentimes shows that its origin differs from that of its context. It is
not proposed to deal with such variations of the general pattern, but
to seek rather to arrive at some definite conclusion as to the
“provenance” of the chief authorities lying behind the main sections
of the historian’s work.
The account of the Ionian revolt is, as it would appear, drawn
largely from traditional sources. It is, of course, probable that
Herodotus in his early years actually talked with men who had
played a part in it; but it is also probable, on the other hand, that he
had not at that period of his life any formed intention of writing his
history. The traditions which he followed were undoubtedly
unfavourable to the Ionians. They were also defective in information.
Their origin must certainly be attributed to the Asiatic coast of the
Ægean; and this fact, together with these two main characteristics
above mentioned, points to the Dorian Greeks of the cities of the
Carian coast, of which Halikarnassos, Herodotus’ birthplace, was
one, as having been mainly responsible for them.
The attitude of these Dorians at the time of the revolt would be
only too calculated to make them unfavourable to those who had
taken part in it. Such information as Herodotus could get from Ionian
sources would be coloured by mutual recriminations, and would not,
consequently, be calculated to disabuse his mind of its first
impression.
Some few examples of the use of official records and inscriptions
are apparent, but they are few and far between.
The Marathon story seems to be almost wholly traditional, derived
from two Athenian sources of opposite tendency,—the one
aristocratic, wherein the services of the Miltiades were brought into
prominence, the other democratic, wherein the medizing tendencies
of the Alkmæonidæ were, in so far as possible, disguised and
excused. These two versions, with additions of his own, Herodotus
has combined into his narrative; but there must have been a large
mass of matter in both traditions which he has rejected as unreliable,
probably owing to the absolute impossibility of reconciling the
statements in the one version with those in the other.
The confused history of the wars between
PARTIALITY OF
GREEK TRADITION.
Athens and Ægina, one of which falls within
the decade between 490 and 480, is related on
the basis of an Athenian version, which the historian himself has
probably edited in certain parts: but the whole tradition was so
confused that he has evidently been able to make comparatively little
out of it.
The sources for the period immediately preceding the war of 480
are, as might be expected in the history of a time at which many of
the less prominent of the Greek states appear on the stage, of a very
varied character. To the employment of the records at Delphi in this
part of the historian’s work reference has been already made; but, in
addition to these official records, he appears to have made use of
tradition surviving at Delphi itself, especially with reference to the
relations of the oracle with Athens at that particular time.
The main basis of his account of the negotiations with Gelo and of
the events in Sicily in the period immediately succeeding them is a
tradition which was current throughout European Greece, whose
manifest tendency was to exclude the Sicilian tyrant from all
participation, direct or indirect, in the struggle for Hellenic freedom.
He expressly mentions, indeed, that there was a Sicilian version
which differed from it in certain respects; but he evidently attached
but little importance to it. That he made a mistake in his choice of
authority there can be little doubt; but, apart from the natural
predisposition of one who knew the tale of tyranny on the Asiatic
coast, and had every reason to dislike it, the Greek version had
probably taken firm root by the time at which he collected his
materials. The Sicilian version, with its probable exaggerations, is
preserved in Diodorus.
In discussing the attitude of Argos at this time, he expressly
reproduces two traditions, giving his preference to that of local Argive
origin. The other was probably that which was carried current among
the Greeks who had been patriotic, though certain details in it
suggest that it was originally from an Athenian source; and part of it
originated more than thirty years after the war, at the time of the
233
negotiations which led to the mysterious Peace of Kallias.
The tale of the negotiations with Corcyra, as well as of Corcyra’s
attitude at the time of Salamis, rests on a tradition which was in all
probability current among all the patriot Greeks. Corcyra was never
popular. The social Greek hated its individualism as a state in the
Hellenic world.
The tradition which Herodotus reproduces relating to the motives
which prompted the advice given by Themistocles to the Athenians
regarding the mines at Laurion is all part of that Themistocles legend
which he has consistently followed. Its origin has been already
attributed to the aristocratic party in Athens.
The absence of any attempt to tone down the picture drawn of the
medism of the Northern states points to the fact that the materials for
it were furnished by tradition current among the patriot Greeks.
The tale of Thermopylæ is one of the few stories of greater length
in the history in which the traditional element is homogeneous
throughout. The actual facts of the fighting were probably obtained
from examination of the ground, combined with the evidence of eye-
witnesses. But the whole motive of the story—the causes, that is to
say, which produced these facts—was drawn from a tradition, one
and indivisible, and that tradition was of Lacedæmonian origin. It was
more than that; it was no popular tale, but an official version of
events. It became pan-Hellenic, for the very good reason that the
extraordinary circumstances of the battle did not render the
existence of any other version possible. It would be mere repetition
of a long argument to recapitulate the reasons for this view: they
have been already stated in dealing with the account of the battle
itself. The oracular element contained in it was quite sufficient to
prejudice Herodotus in its favour; but even he does not seem to have
been satisfied with the reasons put forward for leaving Leonidas to
his fate; and he was evidently in doubt as to the true facts of what
occurred on the last day of the defence of the pass.
The tale of Artemisium would appear to have been drawn from
two sources, both of them Athenian. The
PERSIAN SOURCES.
Themistocles legend of aristocratic origin is
interwoven with a pan-Athenian version, whose object was to
emphasize in every possible way the services of Athens to the
national cause at this period of the war, and the many difficulties she
encountered in combating the fatal policy of withdrawal to the
Isthmus.
The same pan-Athenian tradition, combined with the
Themistocles legend, shows itself in the account of the events
between Artemisium and the actual fighting at Salamis.
Alike in the accounts of Thermopylæ and Salamis, descriptions
are given of events which occurred on the Persian side; even
discussions which took place in the Persian Council of War are
reported in what profess to be the actual words used. The latter may
be dismissed with the remark that they are instances in which the
dramatic instinct got the better of the historical sense of the historian.
But it is impossible to say that the matter in the description and
discussions is wholly unhistorical. The prominence of Artemisia in
one of them suggests that it is founded on a Halikarnassian tradition
of his own day. The remainder may rest partly on traditions carried
back to Asia by Greeks who were with Xerxes’ army. Herodotus
himself, who had relations with Persians in high positions in later
times, may have derived incidental information from them. But these
Persian tales in his history of the war must be regarded as indicating
only the drift of the truth.
The tale of Salamis, in so far as it is not founded on notes from a
personal narrative, suggests an origin in pan-Hellenic tradition. The
credit given to the Æginetan on the one side, and to the Ionians on
the other, can only have been the outcome of general consent. No
doubt, the more or less personal details of the fighting are drawn
from a variety of sources, Ionian, Halikarnassian, Athenian, and what
not; and the tale of the would-be Corinthian cowardice shows
unmistakably the traces of the cloven foot of later Athenian enmity.
The comparative briefness of the tale of Mykale suggests that
Herodotus had not the opportunity of getting much information with
regard to that important battle. As it stands, it presents no certain
trace of origin, but is probably the version of the story which was
generally current in Greece. Despite its brevity, it is, in contrast with
the story of Marathon, one which raises no difficulties. The evidence
was not evidently large in quantity; but, such as it is, it has all the
appearance of having been sound. It affords, moreover, another
example of that fact, to which reference has been already made on
several occasions, that Herodotus did not write history on the basis
of testimony with which he was not satisfied.
The view adopted in this volume on the right use of Herodotus’
work as a basis for history is not likely to commend itself to
extremists. It is perhaps due to the strong personality of the old
historian that his critics have at all times shown a tendency to divide
themselves into two camps, one of which champions not merely his
honesty, but his absolute accuracy, while the other bitterly assails
both. In a work so great and so extensive as his, it is almost
inevitable that the amount of accuracy obtained in various parts of it
should vary very greatly. The multiplicity, too, of his sources of
information would necessarily promote the same tendency.
As an historian he has suffered alike from his admirers and
detractors. He has been credited with a kind of inspiration. He has
been decried as a forger of history. It would be waste of time to
discuss views so extreme. Any one acquainted with the conditions
under which his history must have been composed will understand
the impossibility of attaining complete accuracy under such
circumstances. Any one who takes the trouble to examine the proofs
of the charges of forgery brought against him will know that they
have often been founded on mistaken premisses, and are in no
single instance convincing.
But there is an intermediate attitude taken towards his work by a
certain section of the learned world, about which a few words must
be said. There is a widespread tendency to
MODERN
CRITICISM.
adopt the view that, whatever the inaccuracies
contained in his writings, they represent the
high-watermark of knowledge attainable at the present day
concerning the period of Greek history of which he wrote; and that,
therefore, fertile criticism of his work aiming at any reconstruction of
the story is impossible. Such reconstructions are, moreover,
frequently stigmatized as attempts to read the ideas of the
nineteenth century after Christ into the history of the fifth century
before Christ. A charge, of the kind can only be founded on the
assumption that Herodotus was qualified not merely to record the
acts of the men of the period of which he wrote, but to appreciate to
the full the ideas and motives which produced the acts of those who
were presumably the most skilled men of their day in special
departments of life.
The evidence which is given in this volume, with respect at least
to the military history of this period, does not support such an
assumption. Putting aside detail, the general conclusions to which it
points are three in number:⁠—
1. The extraordinary accuracy of statements of fact in Herodotus;
2. His lack of information as to the motives of those in command;
3. His lack of experience such as might have enabled him to form
deductions as to those motives.
If the evidence on which the first of these conclusions is founded
be held to justify it, it is not too much to assert that the modern world
is provided with the means of forming a sound judgment as to the
causes underlying the history of the most critical years of the fifth
century.
The debt of civilization to Herodotus does not require
exaggeration.
INDEX.
A

Abæ, 349, 436


Abdera, 220
Abydos, 110, 213 n., 214 ff., 217, 253, 272, 418, 430, 530 f.
Acarnania, 241
Achæans, 226, 229 n.
Achæmenes, 344
Achæmenids (family of), 33, 38, 41, 83
Achaia, 379
Achaia, Phthiotis, 259, 279
Acilius Glabrio, 260 n., 264 n.
Adeimantos, 328, 329, 364 f., 368, 405
Adramyttion, 217
Æakes, 129 f., 134
Ægaleos, Mt., 372, 375, 385, 392, 398 n., 452
Ægina, Æginetans (wars with Athens), 53, 77, 154 ff., 158 n., 202,
204, 205, 240, 320, 353, 354 and n., 355 n., 362, 365 f., 367
f., 373, 376, 378, 388, 389, 393, 397, 400, 401, 405, 406, 431,
433, 469 n., 514–516 and n., 562, 577
Ægospotami, 532
Ægosthena, 446
Ænianians, 226, 229 n.
Ænos, 218
Æolian Greeks, 51, 91, 137, 140, 218, 219
Æschines, 162
Æschylus, 354 n., 369 ff., 377 and rest of chap. ix. passim,
especially 391, 392, 394, 397, 570
Ætolia, 241, 260 n., and 262 n., 263 n.
Africa. African, 425
Agathyrsi, 58
Agora, 218
Agrieliki, Mt., 163 ff., 174
Akanthos, 152, 220, 221
Akragas [Agrigentum], 246, 254, 423, 427 f.
Alamana Bridge, 279 f., 284 f.
Aleuadæ, 207, 227 f., 230 n., 252
Alexander (of Macedonia), 68, 231, 257, 436 f., 476 and n., 488,
546
Alexander the Great, 426
Alkmæonidæ, 23, 77, 157, 166 ff., 175, chap. iv. passim, 201 n.,
202, 307, 574
Alpenos (oi), 290 f., 300, 303, 311 n., 312
Alyattes, 14, 18, 19
Amanus, Mt., 426
Amasis, 36
Amathus, 101 ff.
Ambrakiots, 354 n., 469 n.
Amompharetos, 487, 492, 499, 504, 510, 516, 520
Amorges, 115
Amphictyony, 262, 284 f., 569
Amphipolis, 66, 116
Amphissa, 348 ff.
Amyntas, 68
Anaktorians, 469 n.
Anaua, 213
Anaxandros, 295
Anaxilas, 254 n.
Androkrates, Temenos of, 464, 465 ff.; site, 466 n., 470, 497
Andros, 374, 412 ff., 417, 419, 562
Anopæa, 268, 269 n., 271 n., chap. vii. passim (descn., 300 ff.),
542
Antandros, 56, 69, 217
Anthele, 280–284, 296 n.
Anticyra, 280 f.
Antigonus, 263 n.
Antiochus, 264 n.
Aphetæ, 320 n., 326 ff., 342, 343, 569
Apidanos, R., 259
Apollonia, 51
Apotripi Springs, 454, 465 ff., 470, 478 n., 505, 506
Aráchova, 350
Arcadia, 273, 306, 444, 567
Arderikka, 192
Ardys, 12
Argilos, 220
Argiopian country, 494 ff., 499
Argos, Argolis, 226, 235, 237, 240, 243 f., 250 n., 253, 351, 353,
379, 444, 545, 565, 567, 575
Ariamnes, 404
Aristagoras, 47, 78, chap. iii. passim, 159, 299
Aristides, 202, 386, 388 ff., 403, 461, 470, 496, 547
Aristocratic traditions, 170, 175, 203
Aristodemos, 274 f., 312
Aristomenes, 12
Aristophanes, 170, 179 n., 523, 563
Aristotle, 175, 177 f., 255, 358, 420
Artabanos, 209, 217 f.
Artabazos, 428 ff., 475, 476 n., 508, 514, 518, 546
Artaphernes, 42, 69, 74, 76, 78 ff., chap. iii. passim, 147 ff., 159,
201 n.
Artaphernes (younger), 160, chap. iv. passim, 200
Artauktes, 531 ff.
Artemisia, 113 n., 220, 374, 402 f., 410, 577
Artemisium, 265 f., 270, 271, 276, 298, chap. viii. passim, 351,
353 f., 355, 358, 359, 374, 383, 404, 441 n., 538, 541, 562,
569, 576 f.
Artybios, 105
Asea, 444
Asia Minor, Geographical, 7, 13
Asopos, R., Bœotia, 448 and chap. xi. passim, especially 470 and
n., 473
Asopos, R., Malis, 260 ff., 277 ff., 299 ff., 345 f., 348
Assyria, 8 f., 10, 12, 14–16, 39
Astyages, 16, 17
Atalanta, 261, 279, 309, 346, 349
Atarneus, 140 f., 217
Athens, Athenians,
Ægina, 53, 98, 154 f., 158 n., 202, 240, 562, 574 f.
Army, 431, 461, 468, 469 n., at Platæa, 500 ff., 503 ff., 519; at
Mykale, 527, 529–532
Constitutional, 174 ff., 389, 431
Fleet, 93, 198, 203 ff., 237, 265, 270 f., 320, 337, 351, 354, 355,
365, 368, 393, 405, 552 f.
General, Delphi, 232, 240, 262 n.; siege, 356 ff., 436 ff., 530,
545
Internal politics, 76 f., 166 ff., 199, 201 ff., 388, 416, 419, 563
Ionian revolt, 92–98, 133, 167
Persia, 72, 74, 76, 77 f., 81, chap. iv., 214, 224 ff., 232, 241 f.,
357, 546
Strategy, 270 f., 275, 359 f., 523, 549, 550 f.
Trade, 367
Athenian sources, 54, 98, 155, chap. iv., 319, chap. viii. passim,
321, 324, 340, 341, 405, 477, 491 f., 508 n., 510, 563, 567,
574, 575, 576
Athos, Mt., 151, 153, 212, 221
Atossa, 72
Attaginos, 517
Attica, 159, 162, 234 f., 353, 355, 356, 358, 372, 444, 445, 526,
549
Atyadæ, 6
Avlona (valley), 164 f., 174, and chap. iv. passim
Axios, R., 221

Bactrians, 418
Bakchylides, 28
Bithynia, 18, 60
Bœotia, Bœotians, 77, 228, 229 and n., 231, 252, 257, 262 n.,
275, 346 f.; routes, 346, 347, 350, 374, 407, 410, 439, 440,
445, and chap. xi. passim (especially 452, 455, 471, 477, 498,
505, 507, 512, 513, 519 ff.), 527, 544, 547, 549
Bosphorus, 50, 115
Boudenitza 265, 276, 346
Branchidæ [Temple of the], 22, 89
Brennus, 262 n., 265, 268 n., 281
Brygi, 150 f.
Bury, Prof., 357 n., 389, 390 n.
Busolt, 155 n.
Byzantion, 49, 50 n., 51 n., 56, 69, 99, 120 f., 135, 145, 518

Cadmus, 254 n.
Cambunian Mts., 231, 257
Cambyses, 36 f., 55, 255, 538
Cappadocia, 213
Caria, 18, 29, 31, 91, 99 ff., chap. iii. passim, 219, 338
Carrhæ, 426
Carthage, Carthaginians, 131, 245 ff., 254 ff. n., 355, 421–428,
523, 540
Cenchrea, 379
Chabrias, 456 n.
Chæronea, 347, 544
Chalkidike, 151, 429
Chalkis, 77, 134, 162, 265, 277, 320, 323 ff., 331, 332 and n., 342
f.; route, 347, 354 n., 469 n.
Charadra, 163 f. and chap. iv. passim
Charopinos, 94
Chileos, 442
Chilon, 344
Chios, 30, 83, 118, 120, 125, 129, 136 ff., 433, 530
Chronology, 107 f., 111, 114; revolt, chap. iii. passim, and 142–
144, 151, 172 f., 197 n., 198, 203 n., 229, 235, 237, 239, 240,
250, 251, 253 n., 271 f., 272 n., 319 f., 320 n., 330 f., 332 and
n., 342, 343, 377, 388, 390 n., 417, 427, 448
Cilicia, Cilicians, 106, 123, 148, 160, 219, 336 n., 343, 393, 402
Cimmerians, 10, 12
Clinton (Fasti), 203 n.
Constantine, 515
Constantinople, 515
Corcyra, 240 ff., 355 and n., 369 n., 576
Corinth, 21, 37, 77, 78, 205, 241, 270, 273, 306, 320, 328, 329,
339, 354 n., 355, 364 f., 367 f., 389 f., 398 n., 405, 469 n.; at
Platæa, 506, 517, 528, 535, 543, 563 f.
Cornelius Nepos, 184 n.
Corsica, 131
Creasy, Sir Edward, 407
Crete, Cretans, 235, 237, 240, 242
Crœsus, 18–28, 55, 97, 214, 349
Croiset, 362
Cyaxares, 15
Cyclades, 82

You might also like