jQuery 1.0.3

Posted on by

Another bug-fix release is ready for all to enjoy! It is highly recommended that you upgrade right away. As always, if you spot a bug, please add it to the bug tracker.

As with the last release, jQuery 1.0.3 is featuring only bug fixes – leaving all API additions/changes/deletions until the next full release: jQuery 1.1.

Once again, Jörn Zaefferer did an incredible job really keeping on top of the bugs, fixing the vast majority of them. Much of this release was made possible by him.

Download Now:

This release includes a new package: A complete zip file of everything associated with this release. This includes three versions of jQuery (Regular, Lite, and Packed), the test suite, and all the documentation. Now you don’t have to build it yourself just to have your own copy.

Tickets Closed:

The full set of bugs, or enhancements, that were closed with this release:

Note: Even though about 60 bugs are shown below, many of them were messed with by spammers – so I’m not entirely sure which ones were fixed this release and which ones are just zombie bugs that got re-closed. I’m fairly positive that while there were a lot of bug fixes this release, there weren’t 60 of them.

  1. hover cross browser issue
  2. hoverClass
  3. slideUp/Down buggy in Opera 9.01
  4. jQuery?s toggle(); gets mixed up with moo.fx?s toggle();
  5. FX flash bug in animations
  6. .css() returns incorrect values
  7. Normalize event object
  8. Opacity should go to 1.0
  9. appending thead to table
  10. Problem with ‘e’ being passed to JQuery.css()
  11. [PATCH] IE Opacity issues resolved
  12. bug in show when used inside callback
  13. [jQuery] hover function does not invoke mouseout callback
  14. children() may return nothing
  15. [PATCH] $().hover error in firefox
  16. Context is being modified
  17. .text() includes comments
  18. Animation Queueing is Broken?
  19. IE weirdness on semi-opaque anti-aliased text, a small fix
  20. $([[‘a’, ‘b’]]).length
  21. $().trigger broken since rev. 127
  22. JS ‘warnings’ generated in firefox
  23. Leak for Mozilla/Firefox browsers (using addEventListener)
  24. Safari crash in test suite
  25. remove() & remove(expr) not work
  26. [PATCH] innerWidth and innerHeight fails in IE with no borders
  27. $.load requires a callback
  28. o.getAttribute is not a function (line 634)
  29. Unavailable response header breaks Firefox 1.0
  30. Problems with show and hide
  31. Nested in display:none gives width()/height()=0
  32. this.set is not a function
  33. ifModified arg to $.ajax()
  34. ready does not work over https with msie – fix
  35. Params to $.get() are appended wrong to querystring
  36. ajax summary / todo list
  37. $(‘node1/node2’) gives error when node1 is empty
  38. The float property for IE
  39. Opacity doesn’t work in IE
  40. $.postJSON
  41. cloneNode() issues
  42. “name.replace is not a function” in 1.0.2
  43. it is impossible to implicitly abandon search context (without .end())
  44. load() of html is not shown properly after hide/show
  45. Seperate private and public $.extend
  46. $.load should automatically be JQuerified
  47. ajaxStart and ajaxStop are having issues
  48. .add( jQuery )
  49. Double assignment when setting iframe src attribute
  50. XML not properly parsed by Interface Autocompleter
  51. Some variables are not initialized properly in jQuery.ajax in 1.0.2
  52. $.ajax: Evaluate JS for “html” dataType like load()
  53. $(‘something’).load(‘test.html’).show(“slow”) won’t work
  54. Mod of API Docs for jQuery “val”
  55. jQuery 1.0.2 appears to break the Interface Elements Autocompleter plugin
  56. Hyphens in CSS, IE6
  57. Assert that animate does not alter the hash param
  58. .animate() overflow not reset

Zebra Table Showdown

Posted on by

As a follow-up to the previous event selector showdown comes a new Zebra Table Showdown.

The Challenge:

Making all tables on a page have striped (“Zebra”) backgrounds (different coloring on every odd row).

The Rules:

  • The odd/even styling should be done by adding a class for the ‘odd’ numbered table rows.
  • This must be able to work on multiple tables. (It’s not as simple as finding all rows then going through every odd one, otherwise an even row could become highlighted in the next table).
  • The code should be done as elegantly as possible, using as much of a libraries’ functionality as possible. Speed is not an issue.

Intended Result:
zebra-fig1.gif

Plain DOM Scripting: (demo)

var tables = document.getElementsByTagName("table");
for ( var t = 0; t < tables.length; t++ ) {
  var rows = tables[t].getElementsByTagName("tr");
  for ( var i = 1; i < rows.length; i += 2 )
    if ( !/(^|\s)odd(\s|$)/.test( rows[i].className ) )
      rows[i].className += " odd";
}

Note: This includes a check to make sure that the 'odd' class doesn't already exist on the table row. This is taken care of by all modern libraries.

Yahoo UI: (demo)

var tables = document.getElementsByTagName("table");
for ( var t = 0; t < tables.length; t++ ) {
  var rows = tables[t].getElementsByTagName("tr");
  for ( var i = 1; i < rows.length; i += 2 )
    YAHOO.util.Dom.addClass( rows[i], "odd" );
}

Note: Although, their own developer site disagrees.

Dojo: (demo)

var each = dojo.lang.forEach;

each(document.getElementsByTagName("table"), function(table){
  each(table.getElementsByTagName("tr"), function(row,i){
    if ( i % 2 == 1 )
      dojo.html.addClass( row, "odd" );
  });
});

Note: A common function was assigned to a variable in order to make the code shorter.

Prototype (1.4.0): (demo)

$A(document.getElementsByTagName("table")).each(function(table){
  $A(table.getElementsByTagName("tr")).each(function(row,i){
    if ( i % 2 == 1 )
      Element.addClassName( row, "odd" );
  });
});

Mochikit: (demo)

var byTag = getElementsByTagAndClassName;

forEach( byTag("table"), function(table) {
  var rows = byTag( "tr", null, table );
  for ( var i = 1; i < rows.length; i += 2 )
    addElementClass( rows[i], "odd" );
});

Note: A common function was assigned to a variable in order to make the code shorter.

Prototype (1.5.0): (demo)

$$("table").each(function(table){
  Selector.findChildElements(table, ["tr"])
    .findAll(function(row,i){ return i % 2 == 1; })
    .invoke("addClassName", "odd");
});

mootools: (demo)

$$("table").each(function(table){
  $ES("tr", table).each(function(row,i){
    if ( i % 2 == 1 )
      row.addClass( "odd" );
  });
});

jQuery: (demo)

$("tr:nth-child(odd)").addClass("odd");

If you feel as if you have a more elegant solution than the ones posted here, please post them below so that the listing can be updated.


New Submissions:

These are new entries that have been submitted by other readers.

AJS: (demo)

AJS.map(AJS.$bytc("table"), function(table) {
 AJS.map(AJS.$bytc("tr", null, table), function(row, i) {
   if ( i % 2 == 1 && !/(^|\s)odd(\s|$)/.test( row.className ) )
     AJS.setClass( row, "odd" );
 });

Prototype 1.5.1: (demo)

$$('tr:nth-child(odd)').invoke('addClassName', 'odd');

Minor API Change in 1.0.2

Posted on by

I forgot to mention in the 1.0.2 release notes, the other day, that there was a minor API change. This was a mistake, as we should’ve held off on making an API change until the next major release (jQuery 1.1).

As summarized by Steven Wittens, here is the premise behind the change:

In jQuery 1.0.2, the first argument to the ‘success’ callback has been changed to return the actual data rather than the XMLHttpRequest object. Use the ‘dataType’ argument to $.ajax() to control how the data is returned. Note that jQuery can now parse XML, JSON and JavaScript for you this way.

jQuery 1.0.1

$.ajax( {
  success: function (xmlhttp) {
    var data = $.httpData( xmlhttp );
    // 'data' holds the response data from the server
  }
);

jQuery 1.0.2

$.ajax( {
  success: function (data) {
    // 'data' holds the response data from the server
  }
);

Thanks, Steven, for the synopsis – and sorry, everyone, for the inconvenience!

jQuery 1.0.2

Posted on by

jQuery 1.0.2 is now ready for consumption! This release is a huge bug fix release – and it is highly recommended that you upgrade right away. As always, if you spot a bug, please add it to the bug tracker.

In addition to having a better test suite, a big push for this release was to have better cross-browser compatibility for common tasks (such as AJAX operations). Functionally, however, no major features have been added to this release (although, expect some new code come 1.1).

I’d like to take this opportunity to introduce everyone to Jörn Zaefferer. Much of this release was made possible by him. He’s responsible for completely overhauling the test suite (it now has over 260+ tests!) and for fixing the majority of the current bugs and enhancements (over 60 of them!). If you want someone to thank for this release, it should be him.

Download Now:

Tickets Closed:

The full set of bugs, or enhancements, that were closed with this release:

  1. Cross Browser Dimensions
  2. I.E. text rendering at full opacity
  3. FadeIn/FadeOut breaks if opacity is already set
  4. css(‘top’) and css(‘left’)
  5. fx.custom() doesn’t work for opacity in IE
  6. Opacity doesn’t work in IE
  7. jQuery IE6 bug with base href
  8. [PATCH] IE Opacity issues resolved
  9. Namespaced Selection of Elements and Attributes
  10. append(html) function fails, if html is a table fragment and begins with whitespace
  11. IE weirdness on semi-opaque anti-aliased text, a small fix
  12. a fix for getAttribute(‘action’) in forms
  13. IE throws errors for $(this) in nested each loops
  14. IE5 scripting error
  15. Leak for Mozilla/Firefox browsers (using addEventListener)
  16. filter seemingly not operating correctly
  17. $(‘node1/node2’) gives error when node1 is empty
  18. add does not merge sets
  19. extend not(jQuery) to be able to operate with sets
  20. document the behaviour of $(”
  21. $.load requires a callback
  22. [PATCH] $().hover error in firefox
  23. Attribute values in :not()
  24. children() may return nothing
  25. IE throws errors for $(this) in nested each loops
  26. ajax summary / todo list
  27. Safari crash in test suite
  28. wrong safari detection
  29. different behavior for next() in IE and Firefox
  30. [PATCH] IE Memory Leaks from event system
  31. Different Encodings for AJAX
  32. IE 6 removes whitespace, eg. when using append
  33. hover() mouseout bug
  34. $.postJSON
  35. Params to $.get() are appended wrong to querystring,
  36. calling load without arguments throws exception
  37. Returning script tag in IE fails
  38. Unavailable response header breaks Firefox 1.0
  39. ifModified arg to $.ajax()
  40. Timeout as Argument to AJAX
  41. Replacement :input, :radio, etc.
  42. Ajax refactoring
  43. jQuery’s toggle(); gets mixed up with moo.fx’s toggle();
  44. Error Parsing Opacity
  45. .constructor == Function is not enough
  46. [PATCH] $().hasClass()
  47. Create IE 5.0 Support Plugin
  48. [PATCH] innerWidth and innerHeight fails in IE with no borders
  49. sibling() returns siblings and the subject
  50. IE fails with #element/* expressions
  51. XHTML Tables
  52. wrap breaks when the HTML structure contains text
  53. Fix for attribute *=, ^=, and $= in cases where special attributes.
  54. `]` breaks selectors
  55. Including jQuery again overwrites already registered document-ready events
  56. Expression generates error in FireFox 1.5.0.6
  57. support of ancestor:: axis
  58. prev() does not work as expected
  59. nth-of-type
  60. Animate function release
  61. attr(‘checked’, true) doesn’t work

Sponsored jQuery Development

Posted on by

Excellent news today: Paul Bakaus has received sponsorship from his employer, New Identity AG, to contribute back to jQuery project. He’s being given a chunk of hours under which he is sponsored to develop jQuery-related code. All of this is going straight back in to the community.

This is in addition to the fact that New Identity AG is in the process of making some major switches over to using jQuery as their primary JavaScript library. They have a number of high profile clients that they develop for.

Paul is going to begin by undertaking a number of tasks that have been “in the works”, namely: A Prototype support plugin, Cross-browser utility methods, and improved functionality and bug fixes for Interface.

This is a clear sign of a couple things: That jQuery’s German user-base is growing quite well, that development will move at an even quicker pace now, and that Interface is becoming an integral part of the full “jQuery package.” Expect to see some important updates in the pipeline, soon.

jQuery Interviews

Posted on by

People are really starting to pick up on the “jQuery thing”! I’ve given a number of interviews and presentations lately concerning jQuery. Here are most of the interviews: One for a magazine, two for online articles, and one podcast. Enjoy!

eWeek: jQuery Eases JavaScript, AJAX Development

As more developers adopt the practice of AJAX-style development to create more interactive applications, they are looking for tools to make the job easier.

One such tool is jQuery, which some users say makes AJAX (Asynchronous JavaScript and XML) development cleaner by making using JavaScript easier. JavaScript is notoriously difficult to work with, said a group of experts at Microsoft’s Lang.Net symposium in early August, in Redmond, Wash.

Drupal Podcast: jQuery Author John Resig

We’ve just posted the 21st episode of the Drupal Podcast! It is an interview with JQuery author, John Resig. We talk about what JQuery is, how it works, and how it will fit into Drupal.

.net Magazine: John Resig of jQuery

Most of the “big” updates to jQuery are going to be community related. I’m now working with a number of international jQuery users who will be translating the documentation and the site’s blog posts into other languages; most likely German, Chinese, Spanish, Italian, and French to start with.

Additionally, since jQuery has an incredibly easy plugin architecture, I’m also working on improving the overall developer community and organization – think Sourceforge for jQuery.

InfoWorld: JavaScript, .Net developers aided in separate projects

In the JavaScript arena, the open source jQuery project provides developers with a JavaScript library to improve the quality of Web applications. JQuery makes it easier to write JavaScript and AJAX (Asynchronous JavaScript and XML), said John Resig, lead developer of jQuery and also an author.

“The big thing that makes it different form other JavaScript libraries is it doesn’t really try to impose itself on you,” Resig said. Developers should be able to write shorter code than before while still getting equal if not better functionality, he said.

jQuery 1.0.1

Posted on by

The first post-1.0 release is now ready – and (as you would probably expect) it’s a bug fix release. I’ve been working on fixing up some of the most pressing 1.0 bugs during the past couple days and I think it’s ready to go. So, without further ado – here’s jQuery 1.0.1:

I definitely recommend that you upgrade to this release since it’ll only help make your development go easier (I expect that the next few point releases will be rather feature-lite). Here’s what’s been fixed in this release:

There’s a couple more, less-pressing, bug fixes waiting in the queue, with a bunch of nice enhancements coming up soon (especially for the AJAX functions, thanks to Will Jessup). The next move is going to be putting the finishing touches on the API documentation and moving proj.jquery.com to jquery.com.

As always, if you spot any bugs, please feel free to post them to the bug tracker (it helps me to keep tabs on everything, and keep it organized).

Update: I’ve applied two hot fixes to this update, both of which fix big problems with this bug update. That’s what I get for releasing this at some awful time in the morning. Please make sure you get the latest source from this page.

jQuery 1.0

Posted on by

I’d like to take this opportunity to announce the brand new jQuery 1.0! A lot of work has gone into this release. A lot of bugs fixed, a ton of new features, and a complete overhaul of how the jQuery development process is run.

In reality, this release is so large, it’s going to take a couple days to release it (this includes a new version of the jQuery web site). So bare with us as we make the transition over to full release. There’s some kinks that’ll have to be worked out (namely, finalizing the new documentation) but it’s all in the pipeline and will be ready within the next couple days.

For now, here are some relevant links to get you started:

If you want to build your own copies of jQuery, you can check it out of Subversion and build it from the command line. You can get the latest jQuery by doing:

svn co svn://jquery.com/home/jquery/src/jquery

There’s so much more to come. I’ll be doing a post every day this week detailing some aspect of jQuery 1.0 along with some screencasts demonstrating what you can do with all the new code. Please, if you spot any bugs, file them in the bug tracker:

I’d like to thank everyone who made this release possible. It’s been a lot of work, but the journey is only just beginning. I can’t wait to delve into some of the very exciting advances that we have planned. Happy Coding!

Update: Here’s a fun fact. jQuery 1.0 has been released nearly one year after it was first conceived as a post in my weblog. Funny how those things work.

Update: The very cool Visual jQuery site has also released a preview version of the new documentation in its sharp style. The final release of their updated docs will be coming in the next couple days.

jQuery Boston

Posted on by

If there are any jQuery users here in Boston, MA – I’m going to be giving a presentation about jQuery on the 23rd for the local Drupal group. I’m not sure if it’ll be recorded and/or transcribed – but I’ll be sure to throw any slides or examples online after its done.

More info about the event can be found on the Drupal website.

Also, I’d love to be able to do a jQuery meetup sometime, maybe in association with a big conference (OSCON, AJAX Experience?) But that’s for another post.

YShout – Real-time Chat with jQuery

Posted on by

View of the Chat Area

Yuri Vishnevsky has just released a new AJAX chat application that makes great use of jQuery. This application allows you to embed a chat area into a section of your web site and have it update in real-time as users chat with each other. It’s really slick and works quite nicely.

YShout includes a bunch of nice features:
– Unicode Support
– An administration area
– Flood control
– and a history viewer

You can view demo of it in action on the project page.

YShout Admin Area

Probably the most interesting part, from the perspective as a jQuery user, is that this isn’t the first version of his application – it’s the third – and is the result of a complete re-write from Prototype to jQuery. Yuri stated that the reason for this switch was that “the file size coupled with the method chaining” together with the “intuitive syntax”.

If you like this application, you should Digg Yuri’s article, as I’m sure a lot of other webmasters would love to put this on their web sites.