foreword xi preface xiii acknowledgments xvi about this book xix about the authors xxiv about the title xxvi about the cover illustration xxvii 1 Introducing jQuery 1 1.1 Why jQuery? 2 1.2 Unobtrusive JavaScript 3 1.3 jQuery fundamentals 5 The jQuery wrapper 6 ■ Utility functions 8 ■ The document ready handler 9 ■ Making DOM elements 11 ■ Extending jQuery 12 ■ Using jQuery with other libraries 14 1.4 Summary 14 2 Creating the wrapped element set 16 2.1 Selecting elements for manipulation 17 Using basic CSS selectors 19 ■ Using child, container, and attribute selectors 20 ■ Selecting by position 24 Using custom jQuery selectors 27 2.2 Generating new HTML 31 2.3 Managing the wrapped element set 32 Determining the size of the wrapped set 34 ■ Obtaining elements from the wrapped set 34 ■ Slicing and dicing the wrapped element set 36 ■ Getting wrapped sets using relationships 43 Even more ways to use a wrapped set 44 ■ Managing jQuery chains 45 2.4 Summary 47 3 Bringing pages to life with jQuery 48 3.1 Manipulating element properties and attributes 49 Manipulating element properties 51 ■ Fetching attribute values 52 ■ Setting attribute values 54 ■ Removing attributes 56 ■ Fun with attributes 56 3.2 Changing element styling 58 Adding and removing class names 58 ■ Getting and setting styles 61 ■ More useful style-related commands 67 3.3 Setting element content 68 Replacing HTML or text content 68 ■ Moving and copying elements 70 ■ Wrapping elements 75 Removing elements 76 ■ Cloning elements 78 3.4 Dealing with form element values 79 3.5 Summary 81 4 Events are where it happens! 82 4.1 Understanding the browser event models 84 The DOM Level 0 Event Model 85 ■ The DOM Level 2 Event Model 91 ■ The Internet Explorer Event Model 97 4.2 The jQuery Event Model 98 Binding event handlers using jQuery 98 ■ Removing event handlers 103 ■ Inspecting the Event instance 104 Affecting the event propagation 106 ■ Triggering event handlers 106 ■ Other event-related commands 107 4.3 Putting events (and more) to work 112 4.4 Summary 124 5 Sprucing up with animations and effects 126 5.1 Showing and hiding elements 127 Implementing a collapsible list 128 ■ Toggling the display state of elements 134 5.2 Animating the display state of elements 135 Showing and hiding elements gradually 135 ■ Fading elements into and out of existence 140 ■ Sliding elements up and down 143 ■ Stopping animations 145 5.3 Creating custom animations 145 A custom scale animation 148 ■ A custom drop animation 148 A custom puff animation 150 5.4 Summary 152 6 jQuery utility functions 153 6.1 Using the jQuery flags 154 Detecting the user agent 155 ■ Determining the box model 161 Detecting the correct float style to use 163 6.2 Using other libraries with jQuery 163 6.3 Manipulating JavaScript objects and collections 167 Trimming strings 168 ■ Iterating through properties and collections 169 ■ Filtering arrays 170 Translating arrays 172 ■ More fun with JavaScript arrays 175 ■ Extending objects 176 6.4 Dynamically loading scripts 180 6.5 Summary 184 7 Extending jQuery with custom plugins 185 7.1 Why extend? 186 7.2 The jQuery plugin authoring guidelines 187 Naming files and functions 187 ■ Beware the $ 189 Taming complex parameter lists 190 7.3 Writing custom utility functions 192 Creating a data manipulation utility function 193 Writing a date formatter 195 7.4 Adding new wrapper methods 199 Applying multiple operations in a wrapper method 201 Retaining state within a wrapper method 206 7.5 Summary 216 8 Talk to the server with Ajax 217 8.1 Brushing up on Ajax 218 Creating an XHR instance 219 ■ Initiating the request 221 Keeping track of progress 222 ■ Getting the response 223 8.2 Loading content into elements 224 Loading content with jQuery 226 ■ Loading dynamic inventory data 229 8.3 Making GET and POST requests 233 Getting data with jQuery 234 ■ Getting JSON data 236 Making POST requests 248 8.4 Taking full control of an Ajax request 249 Making Ajax requests with all the trimmings 249 Setting request defaults 252 ■ Global functions 253 8.5 Putting it all together 258 Implementing the flyout behavior 259 ■ Using The Termifier 262 ■ Room for improvement 264 8.6 Summary 266 9 Prominent, powerful, and practical plugins 268 9.1 The Form Plugin 269 Getting form control values 270 ■ Clearing and resetting form controls 274 ■ Submitting forms through Ajax 276 Uploading files 284 9.2 The Dimensions Plugin 285 Extended width and height methods 285 ■ Getting scroll dimensions 287 ■ Of offsets and positions 289 9.3 The Live Query Plugin 292 Establishing proactive event handlers 292 ■ Defining match and mismatch listeners 294 ■ Forcing Live Query evaluation 294 Expiring Live Query listeners 295 9.4 Introduction to the UI Plugin 299 Mouse interactions 300 ■ UI widgets and visual effects 316 9.5 Summary 316 9.6 The end? 317 appendix JavaScript that you need to know but might not! 319 index 339