About Dave Methvin

CTO, PC Pitstop http://pcpitstop.com

The State of jQuery 2014

Posted on by

The year 2013 was an incredibly exciting one for jQuery. As jQuery celebrates eight years of supporting web developers, it’s time for our annual review. I’m pleased to say that we achieved a lot in 2013 and have some great plans for 2014!

New Leadership

In November, Kris Borchers became Executive Director of the jQuery Foundation as successor to Richard Worth. Kris has been a jQuery Foundation board member and a long-time jQuery contributor, so he understands the mission of the Foundation well. We welcome Kris, and thank Richard for his work in shepherding the Foundation through its first full year of existence.

jQuery used by 68% of the top 100k sites

Continuing Growth

It seems impossible to believe there are still web sites that don’t use jQuery, but the statistics at builtwith.com show there are fewer and fewer of them. jQuery’s core library is used by more than 61 percent of the top 100,000 sites, up 10 percent from last year. Growth is also strong in other jQuery Foundation projects such as jQuery UI, which is now used by nearly one-fifth of top-10,000 web sites.

New Environments

jQuery is also used in a lot of places that can’t be identified through a web crawl. You’ll find jQuery anywhere web technologies are used, not just the public Internet. That includes Google Chrome add-ons, Mozilla XUL apps and Firefox extensions, Firefox OS apps, Chrome OS apps, Windows 8 Store apps, BlackBerry 10 WebWorks apps, PhoneGap/Cordova apps, Node.js, and even the Sony PlayStation 4. By supporting these technologies, we’ve made it possible to take advantage of jQuery knowledge in many places other than just browsers and web pages.

Future-Oriented

In January 2013, we released jQuery 1.9; then jQuery 2.0 was released in April. These two versions dumped old APIs that were making jQuery bigger, slower, and harder to use. jQuery 2.0 went a step further and dropped support for environments that don’t support newer standards, such as Internet Explorer before version 9. From an API standpoint, the two behave identically, though; web developers can update to the 2.x branch whenever those older versions of IE are no longer important to their web pages or apps.

Backwards-Compatible

We knew that removing some old functionality from jQuery core could make migration slow and difficult; after all, a lot of code on web sites was written years ago and the people who wrote it are long gone. That’s why we created the jQuery Migrate plugin to identify code that was using the features we removed. Better than that, it allowed most of that old code to continue to work by shimming in the old behavior. It’s a great tool for keeping a site running while things are being updated, although we don’t advise using it for a long-term fix.

jQuery Served Your Way

With jQuery being used in so many environments, we want to make sure it fits with their workflows and conventions. So, we’re adapting by making jQuery available on both the npm and Bower package managers. This makes it easy for just about any JavaScript-based project to keep jQuery dependencies up to date. Last year’s refactor of jQuery core into small modules also lets developers create a custom build that removes features a project doesn’t need, to reduce the download size.

Keeping it Simple

We haven’t forgotten, however, that most developers keep things simple and just include a copy of the standard jQuery build using a <script> tag. So in 2013 we upgraded our content delivery network (CDN) thanks to a generous donation from MaxCDN. The jQuery CDN is now better than ever and supports the https protocol for delivering all files.

Advocating for Developer Needs

jQuery’s use of a convenient and browser-independent layer around the cumbersome DOM interfaces is one reason for its popularity. As Simon St. Laurent put it, “jQuery is how the web routes around broken API design.” But we don’t want the DOM API repair business to be our full-time line of work. People should be continuing to use jQuery because it’s a powerful way to implement designs and provides a vibrant ecosystem of useful plugins, not because the native DOM APIs are broken, verbose, or inconsistent. That’s why we participate in the standards process through bodies such as the W3C and ECMA.

Let’s Keep Innovating!

Over the next few days, posts on this blog will be counting the ways that the jQuery Foundation is improving the web developer community, in keeping with our mission. If you see something that interests you, we invite you to get in touch with us and participate!

Dave Methvin
President, jQuery Foundation

jQuery 1.11.0/2.1.0 Beta 3 Released

Posted on by

Put down the egg nog and get ready to test. The latest (and most likely last) betas of jQuery 1.11 and 2.1 are now submitted for your inspection and approval. You can get them here:

We know you’ve got a few days off over the holidays, so give us a big present and help us test! Don’t forget that jQuery 1.x supports IE 6/7/8 and jQuery 2.x does not. In other ways the two versions should echo the same feature sets, so it should be possible to switch between the two without too much trouble.

Notable changes

Asynchronous Module Definition (AMD): jQuery components are now built with AMD. jQuery has supported having the library itself loaded by an AMD loader ever since version 1.7. Now, we’re using AMD internally as well, replacing our old modular build system. If you want to know more, see the README file.

Published on npm: The 2.x branch of this beta and all our future 2.x releases will be published on npm so that you can use it with node or packages like browserify. If you want to install the beta, you can use npm install jquery@2.1.0-beta3.

Still to come: No global for the npm version: After polling potential npm/browserify users, we have decided to keep the global namespace clean and not to expose the jQuery global in these situations. Instead, you can do it yourself with window.jQuery = window.$ = require("jquery"). That ticket didn’t make it into the beta, but you should assume you’ll need to set it yourself.

Performance: Our new “lazy feature detects” reduce the startup time for the library, which is especially good for mobile devices. If you never call the API, you never even need to run that code! We also found and removed some situations where jQuery unnecessarily forced a page layout to occur.

Bug fixes: Lots and lots of bug fixes are in this release, including several to ensure the latest versions of browsers like IE11 work smoothly and eliminate console warnings in Chrome. Many fixes are shared across both versions. You can see the complete changelog below.

Breaking changes: None! We’re committed to making this an easy update for you if you already did an upgrade to 1.9+ or are using the jQuery Migrate plugin. So don’t be a chicken, test this beta!

Release Notes

Twas the week before Christmas, when all through the house
Not a creature was stirring, not even a mouse.
The code was checked by the team with such care,
In hopes that a new beta soon would be there.

Contributors nestled all snug in their beds,
While visions of working code danced in their heads.
The pull requests landed, commits all now pushed,
GitHub issues closed, the whole team is bushed.

When on the CDN there arose such a clatter,
I sprang from the bed to see what was the matter.
Away to the laptop I flew like a flash,
Popped open a window and started up bash.

My wondering eyes barely processed the data,
It’s release 3 of jQuery 1.11 and 2.1 beta!

And then, on the roof, I heard at the ready,
The loading of code that was solid and steady.
As I drew in my head, and was turning around,
Down the chimney St. jQuery came with a bound.

“I’m needing your help,” St. jQuery exclaimed,
“If we ship code with bugs I know I’ll be flamed!”
“Just run this beta with your best sites and apps,
so we know if our changes avoided the traps.”

More rapid than eagles contributors came,
He whistled, and shouted, and thanked them by name!
“Now Timmy! now, Richard! now Michał and John!
On Oleg! On Chris! On Jakob and Hong!
To the top of the list, your reward won’t be small!
Now cache away! Cache away! Cache away all!”

He sprang to his sleigh, to his team gave a whistle,
And away they all flew like the down of a thistle.
But I heard him exclaim, as he drove out of sight,
“Happy beta to all, and to all a good-night!”

Changelog

Common to both jQuery 1.11 Beta 3 and jQuery 2.1 Beta 3

Ajax

Attributes

Build

Core

Css

Data

Effects

Event

Selector

Support

jQuery 1.11 Beta 3

Ajax

Core

Effects

Support

jQuery 2.1 Beta 3

Ajax

Build

Core

Event

Unfiled

jQuery 1.11.0/2.1.0 Beta 2 Released

Posted on by

The latest betas of jQuery 1.11 and 2.0 have arrived! You can get them here:

Don’t forget that jQuery 1.x supports IE 6/7/8 and jQuery 2.x does not.

What’s in the beta

Asynchronous Module Definition (AMD): The biggest change in 1.11/2.1 continues to be AMD. jQuery has supported having the library itself loaded by an AMD loader ever since version 1.7. Now, we’re using AMD internally as well, replacing our old modular build system. If you want to know more, read the README file.

Published on npm: The 2.x branch of this beta and all our future 2.x releases will be published on npm so that you can use it with node or packages like browserify. Note that the main jquery page is currently not up to date, and won’t be until we push the final 2.1.0 to it. If you want to install the beta, you can use npm install jquery@2.1.0-beta2. Many thanks to Domenic Denicola who has already reported bugs #14548 and #14549 that will be fixed in the next go-round.

Performance: Our new “lazy feature detects” reduce the startup time for the library, which is especially good for mobile devices. If you never call the API, you never even need to run that code! We also found and removed some situations where jQuery unnecessarily forced a page layout to occur.

Bug fixes: Lots and lots of bug fixes are in this release, including several to ensure the latest versions of browsers like IE11 work smoothly and eliminate console warnings in Chrome. Many fixes are shared across both versions. You can see the complete changelog below.

Breaking changes: None! We’re committed to making this an easy update for you if you already did an upgrade to 1.9+ or are using the jQuery Migrate plugin.

Please do give these betas a try and let us know whether everything is working as you’d like. It’s always frustrating to us when we make a new production release and people find bugs that could have been fixed during the beta process. It only takes a few minutes to smoke-test your code against these betas, and it will save both you and us a lot of future heartache!

Sad sourcemap story

One of the changes we’ve made in this beta is to remove the sourcemap comment. Sourcemaps have proven to be a very problematic and puzzling thing to developers, generating scores of confused questions on forums like StackOverflow and causing users to think jQuery itself was broken.

We’ll still be generating and distributing sourcemaps, but you will need to add the appropriate sourcemap comment at the end of the minified file if the browser does not support manually associating map files (currently, none do). If you generate your own jQuery file using the custom build process, the sourcemap comment will be present in the minified file and the map is generated; you can either leave it in and use sourcemaps or edit it out and ignore the map file entirely.

We will be encouraging browser makers to come up with better ways to handle sourcemaps for situations like jQuery’s, where there are widely distributed files on CDNs. We’d like sourcemaps to be robust and gracefully handle situations like file renaming or missing files. See our bug ticket for more information.

Let’s give thanks

As Thanksgiving Day approaches, let’s give a hand to the great people who have contributed to jQuery core code since the last release: Amey Sakhadeo, Anthony Ryan, Chris Antaki, Chris Price, Corey Frang, Daniel Herman, Dominik D. Geyer, George Kats, Guy Bedford, Ilya Kantor, Jeremy Dunck, Jörn Zaefferer, Lihan Li, Marian Sollmann, Michał Gołębiowski, Mike Sidorov, Noah Hamann, Oleg Gaidarenko, Richard Gibson, Ronny Springer, Scott González, Sindre Sorhus, Terry Jones, Timmy Willison, and Timo Tijhof.

jQuery 1.11 and 2.1 Beta 2 Changelog (common to both)

Ajax

Attributes

Build

Core

Css

Data

Effects

Event

Selector

Support

jQuery 1.11 Beta 2

Ajax

Core

Effects

Support

jQuery 2.1 Beta 2

Ajax

Build

Core

Event

jQuery 1.11 and 2.1 Beta 1 Released

Posted on by

Ahoy Matey! Do you know what today is? It’s Talk Like a Pirate Day!

Before the jQuery team weighed anchor and ran for the grog, we left a treasure chest on the jQuery CDN filled with beta versions of jQuery 1.11 and 2.1. Here be the treasure map to the bounty:

Don’t forget that jQuery 1.x supports IE 6/7/8 and jQuery 2.x does not. Here are the highlights of what changed:

Asynchronous Module Definition (AMD): In this release we’re going full-mast with AMD. jQuery has supported having the library itself loaded by an AMD loader ever since version 1.7. Now, we’re using AMD internally as well, replacing our old modular build system. Colin Snover started it with some fine cutlass work, then Timmy Willison made sure the whole library was drawn and quartered properly with AMD. He even mollycoddled you with a fine README file so you can be buildin’ yer own custom version. And because we’re pirates, we’re using aaaarrrrr.js to build it.

Performance: Michał Gołębiowski led the charge to reduce jQuery’s startup time by deferring much of the feature detection code so that it runs the first time you use an API call, rather than on page load. If you never call the API, you never even need to run that code! We also found and removed some situations where jQuery unnecessarily forced a page layout to occur.

Bower support: We’re now using Bower for a lot of our internal dependency management, and plan to publish production versions of jQuery to Bower in the future.

Bug fixes: We keelhauled a few scurvy bugs since the last versions. There’s a list down the way if you want to be knowin’.

API changes: None! With all the internal code changes for AMD, we didn’t want to change a lot of APIs in this version. Your old scurvy code should work with no problems as long as you already did an upgrade to 1.9+ or are using the jQuery Migrate plugin.

Now we know some of you may not be takin’ the time to try this beta. We got a name for you: bilge rats. Don’t be comin’ to us after the release and complainin’ about bugs. Get on board and man the lines so we can get this code shipshape before the beta is over!

A tip of the pirate hat to the sea dogs and scallywags who got this release under way: Timmy Willison, Michał Gołębiowski, Oleg Gaidarenko, Richard Gibson, Amey Sakhadeo, Jörn Zaefferer, Chris Price, Daniel Herman, Guy Bedford, Jeremy Dunck, Mike Sidorov, and Terry Jones. And of course an aye-aye shout-out to the original jQuery pirate, Long John Resig!

jQuery 1.11 and 2.1 Changelog (common to both)

Ajax

Attributes

Build

Core

Css

Effects

Event

Selector

Support

jQuery 2.1

Build

Core

jQuery 1.11

Effects

jQuery 1.10.2 and 2.0.3 Released

Posted on by

It’s nearly Independence Day here in the USA, so we’re delivering something fresh off the grill: jQuery 1.10.2 and 2.0.3. These releases fix a few pesky bugs that have been reported over the past month, but the list is refreshingly small. Since some of the bugs spanned both the 1.x and 2.x branches we’re releasing new versions of both to keep them in sync.

You can get the latest files from the jQuery download page, including sourcemap files and links to helpful tools such as jQuery Migrate. If you’re upgrading from a version of jQuery before 1.9, please do read through that page carefully to make your migration as pain-free as possible. Remember that it may take a few days for the CDNs at Google, Microsoft, and CDNJS to respond to the rocket’s red glare and post the latest versions. In the meantime, use the copy on the jQuery CDN.

We’re pretty optimistic that these latest bug-fix releases should be free of surprises. If you drop the new files into your site and see fireworks, please do your patriotic duty and report a bug with a test case (preferably using jsFiddle) at our bug tracker.

These releases wouldn’t have happened without the contributions of Jason Bedard, Jason Merino, Jörn Zaefferer, Michał Gołębiowski, Nguyen Phuc Lam, Oleg Gaidarenko, Richard Gibson, Rick Waldron, Terry Jones, and Timmy Willison.

jQuery 1.10.2 and 2.0.3 Changelog (common to both)

Build

Css

Selector

jQuery 2.0.3 Changelog (specific to 2.x)

Data

Manipulation

jQuery 1.10.1 and 2.0.2 released

Posted on by

A new release already? It’s only been a week! Yes, because you deserve it. We’re greatly encouraged by all the people who upgraded and found our well-hidden “we completely hosed relative animations” easter egg. This release restores += animations and friends to their former glory, plus it fixes a few smaller bugs that were reported. Since the bug affected both the 1.x and 2.x branches, we’re doing new releases for both.

As always, you can get the latest files from the jQuery download page, including sourcemap files and links to helpful tools such as jQuery Migrate. Thank you Tom Byrer for pointing out that the sourcemap files weren’t listed on the download page, and also for contacting the CDNJS folks to have them host the sourcemap files.

Many thanks to jQuery team members Corey Frang, Oleg Gaidarenko, and Richard Gibson for quickly jumping on these issues and creating unit tests to prevent future regressions. This ensures we never make the same mistake twice, but instead deliver fresh and unique bugs with each release. If you find any of those, please report them with a test case (preferably using jsFiddle) at our bug tracker.

I hope that we’ll see many of you at the jQuery Conference Portland, coming up just two weeks from now!

jQuery 1.10.1 and 2.0.2 Changelog

Effects

Selector

jQuery 1.10.0 and 2.0.1 Released

Posted on by

It’s a wonderful day for a software release. Such a wonderful day, we’re doing two software releases! Today it’s jQuery 1.10.0 and jQuery 2.0.1 making their debut — five years to the day after jQuery 1.2.6 was released.

A simultaneous release isn’t always easy, but it can be very satisfying. The team is certainly satisfied with this duo of deliveries; those of you who have already upgraded to the 1.9/2.0 level should have an easy time with these versions. If you’re upgrading older code, the advice in the jQuery 1.9 upgrade guide still applies to these two releases as well. Also don’t forget that jQuery. 2.0 doesn’t support IE 6, 7, or 8 since we’re leaving that work to the 1.x branch. If you need some help updating or keeping older pre-1.9 jQuery code going, don’t forget about the jQuery Migrate plugin.

As always, the latest versions are all available on our download page.

What’s new? Our main goal with these two releases is to synchronize the features and behavior of the 1.x and 2.x lines, as we pledged a year ago when jQuery 2.0 was announced. Going forward, we’ll try to keep the two in sync so that 1.11 and 2.1 are feature-equivalent for example. We don’t anticipate you’ll find any of these to be disruptive changes. Here are a few highlights:

Relaxed HTML parsing: You can once again have leading spaces or newlines before tags in $(htmlString). We still strongly advise that you use $.parseHTML() when parsing HTML obtained from external sources, and may be making further changes to HTML parsing in the future.

Increased modularity: In either version, you now can do a custom build that excludes the .wrap(), .wrapAll(), .wrapInner() and .unwrap() methods. If all your code is using the newer .on() event methods introduced in jQuery 1.7, you can also exclude .bind() and .delegate() as well. The builds available on the jQuery, Google, and Microsoft CDNs continue to include all methods to provide maximum compatibility.

No more IE9 focus of death: If a page inside an iframe attempts to focus an element or even tries to read document.activeElement before the page is ready, it causes an error. We now work around this issue.

Cordova bug fix in 2.0.1: The Cordova deviceready event doesn’t properly set an event target, so we work around the problem by setting the target to document.

Many thanks to the people who contributed work to jQuery 1.10.0 or jQuery 2.0.1: Brandon Johnson, Chris Talkington, Dmitry Gusev, James Burke, Jason Bedard, Julian Aubourg, Kyle Robinson Young, Mark Raddatz, Michał Gołębiowski, Nguyen Phuc Lam, Oleg Gaidarenko, Renato Oliveira dos Santos, Richard Gibson, Rick Waldron, Scott González, Timmy Willison, Timo Tijhof, and Tom H Fuertes.

jQuery 1.10.0 Changelog

Ajax

Attributes

Build

Core

Event

Manipulation

Selector

Support

Traversing

jQuery 2.0.1 Changelog

Ajax

Attributes

Data

Effects

Event

Manipulation

Selector

Traversing

jQuery 1.10 Beta 1 Released

Posted on by

Today the team is releasing jQuery 1.10 Beta 1. This release should be a relatively easy upgrade for any code that has already been updated for jQuery 1.9/2.0, and it doesn’t introduce a lot of breaking changes–at least not that we know of! That’s why we do beta releases. You tell us.

It may seem like only yesterday that jQuery 1.9 was released, but it was actually all the way back in January. In the meantime, we’ve also delivered jQuery 2.0, the first version of jQuery to leave behind the nightmarish workarounds needed by older versions of Internet Explorer. jQuery 1.10 includes some minor tweaks that we originally introduced in jQuery 2.0, plus bug fixes for issues reported since jQuery 1.9.1.

The biggest change you’re likely to see is that we’ve loosened up the criteria for HTML processing in $(), allowing leading spaces and newlines as we did before version 1.9. We still recommend the use of $.parseHTML() for any HTML coming from external sources. Future versions of jQuery may place tighter restrictions on the kind of markup that $(string) will process, to help you to avoid the ever-present threat of cross-site scripting (XSS) issues.

If you haven’t yet upgraded to the 1.9/2.0 versions yet, catch up by reading the previous blog announcements for jQuery 1.9 and jQuery 2.0. Be sure to check out the jQuery 1.9 Upgrade Guide and the jQuery Migrate plugin.

You can get the beta file here: http://code.jquery.com/jquery-1.10.0-beta1.js

Try this beta code with your most treasured projects and let us know how it works. If you find problems, even when using jQuery Migrate, please report them along with a test case demonstrating the bug at bugs.jquery.com. Please don’t report bugs or ask for help in the blog comments below.

It’s our goal to keep the 1.x and 2.x lines in sync functionally so that 1.10 and 2.0 are equal, followed by 1.11 and 2.1, then 1.12 and 2.2 … well, you see the pattern. Any feature additions or functional changes will happen on these major-point releases. Patch releases will simply fix bugs or bring the two further into sync.

Many thanks to the people who contributed work since 1.9.1 was released: Brandon Johnson, Dmitry Gusev, James Burke, Jason Bedard, Julian Aubourg, Kyle Robinson Young, Mark Raddatz, Michal Golebiowski, Nguyen Phuc Lam, Oleg Gaidarenko, Richard Gibson, Rick Waldron, Scott González, Timmy Willison, Timo Tijhof, and Tom H Fuertes.

jQuery 1.10 Beta 1 Changelog

Attributes

Build

Core

Event

Manipulation

Selector

Support

jQuery Migrate 1.2.1 Released

Posted on by

They say there are no second acts in software … well, there are always second acts in software. Especially when the first act bombs. With that in mind, version 1.2.1 of the jQuery Migrate plugin has arrived. It can be used with either jQuery 1.9 or jQuery 2.0.

This minor update addresses regressions created by the security fix in the 1.2.0 release that rejected some valid HTML strings. Many thanks to GitHub users gerrod, basc, Leonya, krzyko, and lorddefinitia for reporting these issues.

You can find this latest version of the jQuery Migrate plugin on jQuery’s CDN:

Complete instructions and a complete list of the diagnostics given by the plugin are located in the plugin project’s README file.

A full list of all changes are in the issue tracker.

jQuery Migrate 1.2.0 Released

Posted on by

The latest version 1.2 of the jQuery Migrate plugin is here! It can be used with either jQuery 1.9 or jQuery 2.0 to provide diagnostics and remedial help for plugins that haven’t been updated since jQuery 1.9 was released earlier this year. Believe me, this plugin can really make your life easier; if you’ve been afraid of upgrading jQuery, this plugin can cure that irrational software phobia.

The major change in this version is that we’ve re-closed a cross-site-scripting (XSS) hole that was fixed in jQuery 1.7 and reintroduced by the plugin. Essentially, any use of $("#... <tag>") will now always be interpreted as a selector and not as HTML. This is due to some developers using $(window.location.hash) and not realizing that an attacker can often control the contents of the hash on the URL to run code. Always assume that any data you get from an external source may contain harmful content!

You can find this latest version of the jQuery Migrate plugin on jQuery’s CDN:

Using the plugin is as easy as including it right after the version of jQuery you are using, for example:

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.0.js"></script>

Complete instructions and a complete list of the diagnostics given by the plugin are located in the plugin project’s README file.

A full list of all changes are in the issue tracker. Many thanks to Igor Kalashnikov and Max Riviero for their help on this plugin!