Load newer versions of jQuery on Drupal 6

Drupal and jQuery are two of my favorite things. They play nicely with each other and make development a cinch. Unfortunately the version Drupal ships with can be limiting. This is because Drupal 6 was released in February of 2008 and ships with jQuery 1.2.6. As of July 2011, jQuery is at version 1.6.2.

There is a popular module for Drupal called jquery_update which brings the version up to 1.3.2. The module won't update to a newer version because any newer version of jQuery breaks some core Drupal functionality. Until recently, this wasn't a problem for me as jQuery 1.3.2 has worked fine. For a new client, I needed to be able to use the jQuery Nested Accordion plugin which requires at least jQuery 1.4.2. I did some searching and found a way to do this but it requires editing jQuery libraries to pick up the new version.

Here's how I found you can add a new version of jQuery without interfering with Drupal or any jQuery libraries. This would go in your page.tpl.php:

<script type="text/javascript">
  // Save a reference to Drupal default jQuery (1.2.6 or 1.3.2 with jquery_update)
  var jqOrig = jQuery;
</script>
<!-- Load newer version of jQuery from Google CDN -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<!-- Load the library that needs the new jQuery -->
<script type="text/javascript" src="<?php print base_path(); ?>/sites/all/themes/YOUR_THEME/js/jquery.nestedAccordion.js"></script>
<script type="text/javascript"> 
  // Don't let new jQuery take over $ variable
  jQuery.noConflict();

  (function($) {
    $(function() {
      // Do the thing you need with the library
      $('#block-menu').accordion({container:false, event:'hover', activeLink: false})
    });
  })(jQuery);

  // Reset jQuery to original (old) object
  var jQuery = jqOrig;
</script>