Book Image

WordPress 3.0 jQuery

Book Image

WordPress 3.0 jQuery

Overview of this book

Using jQuery you can create impressive animations and interactions which are simple to understand and easy to use. WordPress is the leading publishing platform that can be customized to power any type of site you like. But when you combine the power of jQuery with WordPress—the possibilities are infinite.The combination creates a powerhouse of possibilities for generating top-notch, professional websites with great usability features and eye catching visual enhancements. This easy-to-use guide will walk you through the ins and outs of creating sophisticated, professional enhancements and features, specially tailored to take advantage of the WordPress personal publishing platform. It will walk you through clear, step-by-step instructions to build several custom jQuery solutions for various types of hypothetical clients and also show you how to create a jQuery and WordPress Plugin.This book covers step-by-step instructions for creating robust and flexible jQuery solutions for today's top site enhancements: expanding/sliding content, rotating slideshows and other animation tricks, great uses of jQuery's UI plugin widgets as well as AJAX techniques. Along with these it will also show you best practices for jQuery and WordPress development. That means, you'll learn how to implement just about any jQuery enhancement you can dream of on a WordPress site and also learn how to do it with minimal edits to the site's theme and while allowing the site's content editors to continue adding content the way they've always been (usually with the WYSIWYG editor), and never having to worry that they'll forget or not know how to add a special attribute or custom HTML to a post to make the jQuery feature work.From development tools and setting up your WordPress sandbox, through enhancement tips and suggestions, to coding, testing and debugging, and ensuring that the WordPress content editor's workflow isn't interrupted by having to accommodate an enhancement with special HTML, this book covers the best practices for not only jQuery development but specifically jQuery within WordPress development.
Table of Contents (14 chapters)
Wordpress 3.0 jQuery
Credits
About the Author
About the Reviewer
Preface

jQuery background and essentials


jQuery, created by John Resig is a free, open source JavaScript library. It simplifies the task of creating highly responsive web pages and works well across all modern browsers. John took specific care when developing jQuery so that it abstracts away all the differences between browsers. So you can focus on your project's function and design without getting caught up in elaborate JavaScript coding to handle all the different browsers out there, and the different ways in which individual browsers like to handle the DOM and their own browser event models.

What jQuery does (really well)

jQuery at its core, excels at manipulating the DOM by finding and selecting (hence the word "query" in the name) DOM elements into a jQuery object, often called a wrapper. This allows you to easily get and set page elements and content, and work with all the modern browser event models allowing you to add sophisticated features to your site. Last but not least, jQuery has a really cool set of effects and a UI library. Animation and interface widgets are now at your complete command.

Note

Wait! DOM?!

Don't panic. I know, we're barely into the first chapter and I've mentioned this mysterious acronym DOM several times. I'll be mentioning it a lot more. Learning about the Document Object Model can really enhance your understanding of your HTML for WordPress theme design and jQuery enhancements.

It will also help you better understand how to effectively structure your CSS rules and write cleaner and accurate jQuery scripts. For more information, you can of course refer to the W3Schools website: (http://w3schools.com/htmldom/.

Beyond all that cool DOM manipulation stuff, jQuery has a nice easy learning curve. You CSS gurus will especially enjoy picking up jQuery. Again, in finding the best way to select elements easily, John developed jQuery so that it leveraged web developers' existing knowledge of CSS. You'll find jQuery selectors a snap, especially as you can grab and select sets of elements almost as easily as you can style them with CSS!

How we got here: From JavaScript to jQuery

JavaScript, originally named LiveScript, was invented by Netscape's developers in the early 90s. By 1996, Netscape had renamed LiveScript to JavaScript in order to boost its popularity by linking it to Java (developed separately by Sun Microsystems). Java, which had been around a few years itself already, was becoming even more popular because people were starting to run it in websites by using a separate plugin called an "applet". There are some ways in which Netscape's developers took care to make JavaScript syntax and functions very similar to Java, but there are differences of course. The biggest difference is that JavaScript is a client-side scripting language that is interpreted, which means it runs live in the browser and is not pre-compiled the way Java is in order to execute and run.

It's a bit complicated and beyond the scope of this book to explain it all, but of course, Microsoft's browser, Internet Explorer, in competition with Netscape, took a completely different route and released IE with the ability to run Microsoft's own VBScript. VBScript was made to look and work similar to VisualBasic, but again as an interpreted language, instead of a compiled one like VB. When JavaScript seemed to be gaining more popularity with budding web developers than VBScript, Microsoft introduced JScript. JScript was crafted to be very similar to JavaScript, in order to appeal to JavaScript developers without any licensing hassles for Microsoft, but there were still quite a few differences. You could however, if you were very careful and didn't have high expectations, write a script that executed as JavaScript in Netscape and JScript in IE 3.0.

Yes. What a pain! To this day, IE still only executes VBScript and JScript! The difference is, both Microsoft and Mozilla (Netscape's creation foundation) submitted JavaScript and JScript to ECMA International, an organization which focuses on creating and maintaining standards for information communication systems. In addition to JavaScript, you can thank ECMA Int. for standards running the gamut from CD-ROM and DVD formatting specs to the newer Open XML standards used in Office suites like MSOffice and OpenOffice.

It has taken well over ten years from JavaScript's initial submission in 1997. But as of 2010, both JavaScript and JScript standards are very similar, and both are now technically named ECMAScript (but who wants to try and say that all the time?).

Many developers who came of age in the later 90s and early 2000 use the terms JScript and JavaScript interchangeably without realizing there's a difference! And yet, there are still differences. IE handles ECMAScript in some ways differently compared to Firefox and other browsers. For clarity and sanity, this title will continue to call ECMAScript JavaScript.

Once upon a time, there was JavaScript

Back in the "dark ages", that is before jQuery came along in early 2006, in order to create a more dynamic page that responded to events or manipulated the DOM using JavaScript, you had to spend a lot of time writing long and often clumsy JavaScript using while and foreach loops, with perhaps a few or many if/else statements squashed inside those loops.

If you wanted to evoke your JavaScript immediately, it had to be placed in the header tags or in the body with an onload event handler. The problem is that this method waits for the entire page and all its content to load, including things such as CSS files and images. If you created a loop to select and manipulate a set of elements, and wanted to perform an additional change to that set of elements, you had to select them again in an additional loop or have a long loop with if/else statements that could become complicated to track and maintain.

Lastly, many events you might want the page to respond to, often had to be called separately. I recall sometimes having to create an event script for Firefox (or way, way back in time, on Netscape) and a separate event script for IE. Occasionally, I'd even devise little creative ways to detect different browsers or "trick" them into responding to different events that on the whole were just to make the page appear to look and respond somewhat similarly between the two browsers.

As much as I was enjoying programming and adding engaging interactivity to my sites, I was often a little less than enthused to embark on an in-depth JavaScript endeavor.

Why jQuery is simpler than JavaScript

All that ended with jQuery. jQuery does not stand alone, meaning it's not a new language that browsers support. It essentially boils down to just creating better JavaScript that works. As mentioned, it's a JavaScript library that gives you simpler, easier-to-construct syntax to work with. That jQuery syntax gets interpreted by the browser's JavaScript engine as plain JavaScript. jQuery simply hides a lot of the "ugly" and complicated things that you used to have to do yourself with JavaScript and does them for you.

One of the first things that I grew to love about jQuery (other than its excellent, clear documentation) is that it is essentially a fantastic "loop engine". Now, I call it "looping", but those of you with a more formal programming background or some previous experience with jQuery have probably heard the term used as: implicit iteration. Essentially, jQuery iterates, that is, repeats (aka: loops) through the selected elements of its container object without the introduction of an explicit iterator object, hence, using the term implicit. OK, complicated definitions aside, it simply means you can do just about anything you need to a set of elements, without ever having to write a foreach or while loop! Most people I chat with about jQuery, have no idea this is what jQuery is really doing under the hood.

What's even cooler than being able to easily loop through selected elements is the ability to select them in the first place using standard CSS notation. Then, as if those two features weren't wonderful enough, once you've grabbed a set of elements, if you have more than one operation that you want to apply to the selected set of elements, no problem! Rather than evoking individual functions and scripts on the selection over and over, you can perform multiple operations all at once, in a single line of code. This is called statement chaining. Statement chaining is awesome and we'll learn all about it and take advantage of it often throughout this title.

Lastly, jQuery is extremely flexible and most importantly, extensible. In the four years it's been around, there have been thousands of third-party plugins written for it. It's also very easy to write your own jQuery plugins as we'll discover in this book. However, you'll probably find that for most of your more practical day-to-day WordPress development and maintenance needs, you won't have to! Just as WordPress saves you loads of time and work, you'll find with jQuery that a lot of the work has already been done as well.

Whatever you wish to create, you can probably find a way to do it fairly easily with a jQuery plugin and a tweak or two to your WordPress theme. Perhaps you might just need to write a quick and simple jQuery script to enhance one of your favorite WordPress plugins. We'll go over the basics of jQuery and the most common uses of applying it to WordPress in this book and you'll quickly see that the possibilities are endless.

Note

Getting to know jQuery

This book is here to help you create solutions for scenarios and problems that tend to confront WordPress users. I'm hoping to help you save a little time having to poke through WordPress' wonderful yet extensive codex and jQuery's API documentation. But by no means will this book replace those resources or the great resources maintained by jQuery and WordPress' community members.

For jQuery, I highly recommend you check out jQuery's documentation and the Learning jQuery site:

http://docs.jquery.com

http://www.learningjquery.com

Understanding the jQuery wrapper

As we move through this title, you'll hear and learn a lot more about the jQuery object, also called the "wrapper" or "wrapper set", which probably makes the most sense, as it's a "set" of elements you've selected to work with. But as it's essential to how jQuery works, we'll do a quick introduction now.

To fully understand the wrapper, let's back up a bit outside of jQuery. Ultimately, it all starts with your browser. Your browser has a JavaScript engine and a CSS engine. The browser can load, read, and interpret properly formatted HTML, CSS, and JavaScript (and yes, a host of plugins for Java, Flash, and many different media players that we won't worry about for the purposes of this explanation).

Now this is a very crude, high-level overview. But I think it will help you understand how jQuery works. The browser takes the HTML document that loads into it and creates a map of the document called the DOM (Document Object Model). The DOM is essentially a tree of the HTML document's objects.

You'll recognize most objects as the the markup tags in an HTML document, like <body>, <h1>, <div>, <p>, <a>, and so on. The DOM tree is laid out, displaying the parent-child relationships of those objects to each other as well as mapping relationships to each object's attributes and content. For example, take a look at the following sample DOM tree illustration:

Now for the fun stuff. If a CSS stylesheet is attached or embedded into the document, the browser's CSS engine traverses the DOM tree and styles each of the elements as specified by the style rules. And of course, if there is any JavaScript attached or embedded into the document, the browser's JavaScript engine is also able to traverse the DOM tree and perform the instructions the script contains.

The jQuery library is attached to your XHTML document as a JavaScript file. The library is then able to prepare the JavaScript engine to create an object that will have all of jQuery's functionality inside it, ready to be used upon being evoked (also known as the jQuery object). When you create jQuery code, you automatically evoke that jQuery object and you're ready to start working with it.

Most commonly, you will instruct the jQuery object to traverse the DOM through CSS selectors and place specific elements inside of it. The selected elements are now "wrapped" in the jQuery object and you can now start performing additional jQuery functionality on the selected set of elements. jQuery can then loop through each element that it is wrapped around, performing additional functions. The jQuery object stops looping when it comes to the last object in the set and has performed all the instructions passed to it through statement chaining.

The following illustration shows some of the DOM's objects passed to the jQuery object.

Getting started with jQuery

It's very easy to get started with jQuery. We'll cover the most direct basic method here and in the next chapter, we'll explore a few other ways to work with jQuery in WordPress.

Downloading from the jQuery site

If you head over to the jQuery site at http://jquery.com, you'll find that the home page offers you two download options: production and development libraries of version 1.4.2, the most current stable version available at the time of this writing.

The production version has been compressed and "minified" into a smaller file size that will load much more quickly. It weighs in at 24KB. The development version, which hasn't been compressed, comes in at 155KB. That's quite a bit larger, but it's much easier to open up and read if you ever run into a debugging problem and should need to.

The ideal scenario is, that you're supposed to use the development version of jQuery while creating your site, and when you release it live, switch over to the production version, which will load much more quickly. Many of you will probably never want to look inside the jQuery library, but it's a good idea to download both anyway. In the event your debugging process keeps showing you a line of code in the jQuery library that is giving you problems, you can switch over to the development version to see more clearly what the line of code is trying to do. I can tell you, the odds that something in the jQuery library has a bug in it is slim! It will almost always be your jQuery script or plugin that has the problem, but being able to look at the full jQuery library may give you an insight as to what's wrong with your script's code and why the library can't work with it. There's no difference between the production and development libraries, just file size and human readability.

On jQuery's home page, when you click on Download, you'll be taken over to the Google code site. You can then go back and select the other version for download. Note that the library is not zipped or packaged in any way. It downloads the actual .js JavaScript file ready to be placed into your development environment and used. If you click on the Download button and see the jQuery code appear in your browser, just hit the back button and right-click or control-click, and then click on Save Target As to download it.

Note

Using Visual Studio?

If your code/HTML editor happens to be Visual Studio, you can download an additional documentation file that will work in Visual Studio and give you access to comments embedded into the library. This allows the Visual Studio editor to have statement completion, sometimes called IntelliSense, when writing your jQuery scripts.

To download the definitions file, click on the blue Download tab at the top of the home page. On the Download jQuery page, you'll find the link to the Visual Studio documentation file in the most current release.

You'll place this file in the same location as the jQuery library you downloaded (production or development) and it should now work with your Visual Studio editor.

Including the jQuery library

Let's get right down to it and set up a basic HTML document that includes the jQuery library file we just downloaded. I went ahead and downloaded the smaller production version.

In the following markup, we'll attach the library and write our first jQuery script. Don't worry so much about the jQuery code itself at this point. It's just there so you can see it working. We'll go over really understanding jQuery functionality in the next chapter.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>First jQuery Test</title>
<script type="text/javascript"
src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
jQuery("document").ready(function(){
jQuery("p").css("background-color", "#ff6600");
});
</script>
</head>
<body>
<h1>Sample Page</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </p>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</body>
</html>

That's it! Without any CSS included or embedded into the page or the markup, we've used jQuery to change the CSS background property of the paragraph tags. Now, ultimately we wouldn't want jQuery to replace our regular use of CSS by any means! But from this quick example, you can see how jQuery can be used to alter the look and layout of your site's pages on-the-fly, and in response to events, making your site's pages very responsive to users; it is a powerful feature. You should now be able to load up this file into Firefox to see your first jQuery script in action.

If you've worked at all with WordPress, based on the previous sample, you can probably easily see how to include the jQuery library in your WordPress theme and start working with it. You'd do just fine including jQuery into your theme in this way. However, in the next chapter, we will discuss the more optimal way to include the jQuery library into your WordPress installation.