Intermediate Entries
Monday, May 12th, 2008
Recently I have been getting a real buzz out of developing with jQuery. I’ve been using the library since 2006, releasing sporadic bits of code. In April of this year, I released the third revision of my most complex plugin, jMaps, and updated several other plugins, which are available in my mercurial repository.
This was also the same month I discovered a new plugin which has dramatically changed how I develop applications with jQuery. The plugin in question is Dan Webb’s Low Pro for jQuery, a port of the plugin of the same name for Prototype.
What is Low Pro?
So what is Low Pro? It’s a plugin that provides a way of making more object-oriented JavaScript through event delegation. jQuery’s plugin architecture provides a really simple way of extending the core functionality, but there is no easy way of making macros of code that do several types of events on one element. Until now!
(more…)
Posted in DOM Modification, Events, Intermediate, Plugins, jQuery | 10 Comments »
Monday, March 31st, 2008
CSS and JavaScript are different in many ways, almost all of which are too obvious to mention. However, one difference between the two bears explanation, because it is often the cause of confusion and consternation, especially among those who are making the transition from CSS guru to jQuery novice. In fact, it was one of the first things I asked about on the jQuery mailing list back in 2006. Since then, I’ve seen at least one question on the subject every week, and sometimes as many as one per day—despite an FAQ page and these three plugins to help users deal with it.
How CSS and JavaScript Are Different
So, what’s this important difference?
(more…)
Posted in Beginner, DOM Modification, Events, Intermediate, jQuery | 30 Comments »
Tuesday, February 12th, 2008
jQuery has a nice selection of core animation effects, such as .show('speed') and .hide('speed'), .slideUp() and .slideDown(), and .fadeIn() and .fadeOut(). It even has a couple methods for toggling effects — the aptly named .toggle('speed') and .slideToggle().
All of these methods have optional speed, easing, and callback arguments — although a couple are special cases. The .show() and .hide() methods, when used without a speed, will immediately show and hide the matched set of elements with no animation. When the speed argument is included, the matched elements are shown and hidden gradually by animating their height, width, and opacity simultaneously. The .toggle() method shares its name with a method that takes two arguments that alternate being triggered. All of the other effect methods have a default speed of 400ms.
(more…)
Posted in Effects, Intermediate, Plugins, jQuery | 21 Comments »
Friday, January 4th, 2008
A week or so ago, someone posted a comment on one of my previous articles, asking if I could help her split up the textual content of an element, showing the first part and replacing the second with a link that, when clicked, would reveal the text. This behavior would appear in an FAQ using a definition list (<dl>), with each question contained in a <dt> and each answer contained in a <dd>. I soon realized that the solution would be rather involved, so I decided to create a new entry out of it rather than simply answer her question in another comment.
Here is the simple definition list structure that I’ll be using for the example:
(more…)
Posted in Beginner, DOM Modification, DOM Traversing, Intermediate, jQuery | 15 Comments »
Saturday, October 20th, 2007
After posting the last entry on animated scrolling with jQuery 1.2, I realized that I had left out an important piece of code. Actually, I didn't discover it until someone notified me that another page on the site was broken. Can you spot the problem(s)? [Note: the problem is not in line 3. The syntax highlighter just can't handle the regular expression with two slashes in it ("//") and is incorrectly treating them as a comment mark.] See the answer below the code.
JavaScript:
-
$
(document
).
ready(function(){
-
$
('a[href*=#]').
click(function() {
-
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'')
-
&& location.hostname == this.hostname) {
-
var $target = $(this.hash);
-
$target = $target.
length && $target
-
|| $
('[name=' +
this.
hash.
slice(1) +
']');
-
-
var targetOffset = $target.offset().top;
-
$('html,body')
-
.
animate({scrollTop: targetOffset
},
1000);
-
return false;
-
}
-
}
-
});
-
});
(more...)
Posted in Beginner, Effects, Events, Intermediate, jQuery | 26 Comments »
Thursday, September 20th, 2007
A common pattern in jQuery plugin development is the need to undo what the plugin has done. This is usually handled through a method prefixed with "un". Another common pattern is the use of anonymous functions for event handlers. Unbinding events is easy with jQuery but unbinding a single event handler requires the use of a named function. jQuery 1.2 now provides another option for binding and unbinding events: event namespaces.
(more...)
Posted in Events, Intermediate, Plugins, jQuery | 8 Comments »