jQuery 1.11.0 RC1 and 2.1.0 RC1 Released

Posted on by

We’re just about ready for the final release of jQuery 1.11 and 2.1! Before we release, we’d like you to sanity-check our work. It will save us both a bunch of work if you check things out now, rather than waiting for a release. If something’s not right, we can fix it before millions of people have to deal with it!

Testing is easy, just use one of these files on the jQuery CDN:

We’ve also published the files on npm for those of you using that for dependency management. This version should work properly with browserify.

This version is mainly about fixing bugs and supporting more dependency managers, so you shouldn’t expect to see compatibility issues if you’ve already migrated to 1.9 or higher. But that’s why we’re putting out a release candidate, we want this to be as stable as possible. If you do see problems, please report them at bugs.jquery.com.

Go forth and test!

Changelog

Common to both jQuery 1.11 RC1 and jQuery 2.1 RC1

Ajax

Attributes

Build

Core

Css

Data

Effects

Event

Misc

Selector

Support

jQuery 1.11 RC1

Ajax

Core

Effects

Support

jQuery 2.1 RC1

Ajax

Build

Core

Event

jQuery Austin Speaker Lineup

Posted on by
jQuery Conference Portland logo

With just over a month until jQuery Austin starts, I wanted to take a few minutes to point out the highlight of our conference program: our talks! With a single-track conference, it’s our job to select individual talks that will appeal to the entire conference audience. At the same time, we want to make sure we cover a broad range of subjects related to jQuery and front-end engineering so that every attendee can take home something that will make a difference in their day-to-day development. Those were our goals with our Call for Papers, and we hope you’ll agree our 20 selections fit the bill.

jQuery

One of the main focuses of #jqcon is to bring you the latest on what’s going on in the jQuery libraries, and there’s no one better for that than keynote speakers Dave Methvin and Scott González, development leads for jQuery and jQuery UI. Dave will be talking about more than just recent changes to jQuery core; he’ll be delving into how to diagnose what does (and doesn’t) cause performance woes in modern web apps. And with the jQuery UI and jQuery Mobile projects merging, you’ll want to be sure to hear Scott tell what the future has in store.

As increased modularity comes to jQuery, Timmy Willison will describe how and why we’re making the switch to AMD in core, and how to leverage these forthcoming changes in your apps. Julian Aubourg is going to take a dive into Deferreds and Promises, which have been proven to be a useful tool for managing asynchronous code, even since before their incorporation into jQuery a few years ago.

Mobile

We’re excited to have a number of talks on taming the burgeoning beast that is mobile development. Alex Schmitz will be reviewing the results of the Mobile team’s serious look at the performance of jQuery Mobile for the upcoming 1.4 release, and outline new features that have been added with performance in mind, and Asta Gindulyte will examine how to use jQuery Mobile across a wide variety of screen sizes, from phones right on up to televisions.

Figuring out how to serve the right images to your application’s users across devices and bandwidths has been one of the more interesting discussions in web development for the last year or two, and that’s why we’ve brought Christopher Schmitt to help you make sense of it all. Building applications that work offline is another challenge, and Seth Hallem will explain how to persist, search, update, and display data in HTML5 mobile apps.

Application Development

Debugging is the constant task of software development, and Brian Arnold will be walking us through the constantly-improving tools that can help improve your skills in this dark art. Sometimes, apps appear to work fine until they get into the hands of users who require a screenreader, so Jörn Zaefferer will be giving a primer on the important subject of how to make your web application accessible to all users.

Client-side MVC frameworks are certainly all the rage these days; after having talks on Backbone and Ember at jQuery Portland, we’re thrilled to bring AngularJS into the mix, with Burke Holland bringing you up to speed on directives, one of the framework’s coolest features. If you’ve been using MVC frameworks, one question that you’ve likely wrangled with is where to draw the line between reusable UI widgets and custom application code – which just happens to be one of the subjects Richard Lindsey will be presenting in his discussion of the jQuery UI Widget Factory.

Front-End Ops

Web applications are continuously becoming more JavaScript-centric, bringing increased rigor to the client-side. Grunt has taken off as a popular tool for building and minifying code, and Aaron Stacy‘s talk will explore how to use this JS task runner for even more. Many more developers are recognizing the importance of writing unit tests, and Travis Tidwell will be in Austin to help you incorporate running tests into your deployment process with PhantomJS.

All the technology in the world doesn’t change the fact that web applications are still written by human beings, and Monika Piotrowicz will analyze how we can improve our workflows to better accommodate all the different people who are involved and perhaps even build better products! The jQuery Foundation itself is one organization where we’ve made significant changes to how we work in order to get more developers involved in the project, and Anne-Gaelle Colom will be on hand to detail her experiences as she’s grown to become the Documentation lead for jQuery Mobile.

mind === blown

The open web platform continues to evolve and bring with it exciting new possibilities for what we can do in the browser. Jenn Schiffer will enlighten you on the canvas tag and how it can let you use your coding abilities to be creative and make art, and Vlad Filippov will bring this discussion into a full three dimensions as he shows off voxel.js, a WebGL-based toolkit for creating Minecraft-like worlds and interactive visualizations.

If you’ve got pockets and a phone that vibrates, then you’re surely aware of the utility of push notifications, and Kris Borchers will explain the finer points of their journey to the web platform. Web Components are another emerging spec that have the potential to change how we develop and share reusable widgets, and Juan Pablo Buritica will illuminate the current state of affairs and show tools that will let developers get started writing more modular code today.

Join Us

With so much in store, we hope you’ll head deep in the heart of Texas with us on September 10 and 11! Head on over to the conference site to read more about the program and buy your tickets today. In fact, we’re celebrating the renaissance of our RSS feed with $25 off coupon for anyone who uses the coupon code JQBLOG until we run out of tickets!

If you’re able to attend #jqcon, you’ll probably want to stay within walking distance of the Austin Convention Center in our room blocks at the Hyatt Place and Radisson hotels, especially if you want to be able to explore downtown Austin and rub elbows with your fellow attendees.

If you have any questions, always feel free to get in touch with us on Twitter or via e-mail. If not…see you there!

Live From Portland, It’s jQuery!

Posted on by

Later this week, jQuery Conference is returning stateside for the first time in 2013, and we’re excited to announce another first: inspired by the mighty Willamette River running through Portland, we’re bringing you our first-ever live stream! No matter where you are in the world, you’ll be able to take in both days of #jqcon and the pre-conference Bocoup training. Doing a live stream comes with its own challenges and complexities, so we are selling tickets for each stream, and wanted to take a moment to walk you through your options.

Conference Live Stream

A ticket for the conference live stream costs $149, which entitles you to both tracks on June 13th and 14th. However, jQuery Foundation members get free tickets to the live stream. Membership in the foundation is as little as $100 annually (and you get a t-shirt!), so now’s a great time to join the foundation, show your support for jQuery and learn a whole lot! If a bunch of folks at your company would all like to attend, we’re also selling Group tickets for $749.

Training Live Stream

In addition, live streaming tickets are available for the one-day Bocoup trainings on June 12th for $299, with an additional $50 discount for jQuery Foundation members. You can choose to attend either the Advanced jQuery or Front-end Fundamentals classes. Group tickets are available for $999.

How It Works

Once you buy your live stream tickets, the morning of each event you’ll receive an e-mail with your unique link to the stream. Click on it! (Or simulate a mouse click using the whole document.createEvent song and dance, if you’re so inclined.)

Odds and Ends

We still have a few late-bird tickets remaining, and we’ve just announced we’ll be hosting a party on June 13th thanks to our friends at Jive Software, so if you’re still on the fence, hopefully you just fell off (gently)! Whether you’re joining us in person or on the stream, we’re looking forward to three days of fun and learning, and hope you are too.

As always, follow @jqcon for detailed conference updates, and join us in the #jqcon channel on Freenode to chat with fellow attendees around the room, and around the world.

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!

jQuery Learning Center: Welcome!

Posted on by

Today I’m proud to announce the official opening of the jQuery Learning Center, a community-driven site dedicated to helping people learn about jQuery, JavaScript and front-end development. The goal is to provide a resource that can fill in the gaps that necessarily exist between reading about APIs and actually understanding how to use jQuery effectively. We know a lot of people scour the web each day for this type of information, and we hope the Learning Center can serve as a dependable place for our users to turn.

The Learning Center will continue to evolve, but it would not be what it is today without Rebecca Murphey’s jQuery Fundamentals, which she donated to the jQuery Foundation to form its original nucleus. (Thanks Rebecca!) For this initial launch, we’ve worked to supplement this with information about jQuery UI and jQuery Mobile, features that have been added to jQuery in the interim, and other blog posts and articles from other authors. We’ve also ported over most of what remained on docs.jquery.com, as the Learning Center is indeed intended to be its replacement: documentation that anyone can use — and edit!

There are lots of folks in the jQuery community who like to share their knowledge with others and spend a lot of time writing articles and giving advice, hoping only that it helps someone else understand how to make a decision or get out of a jam. The jQuery Learning Center is for you too. We hope that it will empower those of you who already do this (and those who haven’t — yet) to reach the right audience: the people looking for it! The Learning Center is the latest in the jQuery Foundation’s series of open content sites, so all of the articles are written in Markdown and the entire site is open source. Whether you’ve got a new article you’d like to get published or just notice a typo, the Learning Center is certainly one area of jQuery that’s open to all sorts of new feature requests!

You can find out more about the jQuery Learning Center, and if you’re interested in helping out, you should definitely take a look at our Contributing Guide. We’ll continually seek to flesh out the subject matter on the site, so whether you’ve already got a great idea, an old StackOverflow answer that you always thought “should be in the docs,” or want to take a look at the existing issues for inspiration, there’s sure to be something you can dig into!

We hope the new Learning Center will be a useful new reference for users and authors alike, and welcome your feedback. You can get in touch with us by filing issues, joining us in the #jquery-content IRC channel on freenode, or send an e-mail to content at jquery dot com.

QUnit 1.11 Release: A Look Back (and Forth)

Posted on by

Earlier this week, we released a new version of QUnit, jQuery’s solution for unit testing JavaScript. Along with some details on the new release, I wanted to take this opportunity to tell you a bit more about QUnit, where it came from and where it is going. I’m also looking for your input, to help us shape the future of JavaScript testing.

New in 1.11

The most visible change (aside from our new purple logo) is a runtime display for individual tests. Before, QUnit would show you how long it took to run a full test suite. Now it’ll also show individual times for each test, making it easy to spot slow tests in your test suite. Since it’s useful to have unit tests finish within seconds, tuning tests now becomes a bit easier.

Other changes are mostly bug fixes to built-in features, and various improvements to add-ons. There’s a new theme, a overhaul of the PhantomJS add-on to use its callback system and more. Check out the changelog for a full list of changes.

QUnit’s Evolution

Unlike jQuery UI and jQuery Mobile, QUnit doesn’t have a code dependency on jQuery, it just happens to be developed as a jQuery Foundation project. How did that happen? It all started a long time ago, but in a galaxy pretty close by. Back in 2006, this guy named John was working on jQuery and wrote his own little unit test runner, since there wasn’t much to start with. Two years later, John and I figured that this test runner would be useful as a standalone tool, and it got the name QUnit, as a mashup of jQuery and JUnit. It lived in the same SVN repository as jQuery itself, along with a few pages on the jQuery wiki.

In 2009, we moved it to its own GitHub repository and rewrote QUnit to get rid of the dependency on jQuery. Until October 2011, QUnit was just updated in master, without versioned releases, which kind of worked, but also caused maintenance and dependency headaches. I finally tagged 1.0.0, along with regular releases since then. Recently, QUnit got its own website and API reference.

Moving Forward

Today QUnit is used not only to test jQuery Core, jQuery UI and jQuery Mobile, but many other other projects as well. One notable example is Ember.js. Those guys don’t get tired of telling me how great QUnit is, putting emphasis on the reliability. We’d like to find out more about how developers are using QUnit, so if you’re using QUnit (or planning to), please take a few minutes to complete this brief survey.

From the ~50 answers we’ve received so far, it’s clear that people use QUnit since it’s so easy to get started with, and we certainly intend to keep it that way. It’s also clear that a lot of people are looking for tools and guides on integrating QUnit in CI tools like Jenkins, which is also something we’re planning to work on. Along with that comes a heavy refactoring of the QUnit codebase, which currently lives in a single JS file (and a sister CSS file). We’re going to split the codebase into a few modules, which should help future maintenance and make it easier to integrate other libraries. This will allow us to improve our diff implementation, for instance.

If you’re interested in following future QUnit updates, follow @qunitjs on Twitter and watch the project on GitHub.

Announcing the jQuery Plugin Registry

Posted on by

They say good things come to those who wait, and today we’re happy to end the waiting and unveil the jQuery Plugin Registry. We’ve worked long and hard to put together a brand new site that will serve to reduce the fragmentation and distribution problems that can be obstacles for plugin developers and consumers. We’ve also put an emphasis on remedying a number of the issues that plagued the old jQuery plugins site, especially with respect to workflows for contribution of both plugins and enhancements to the repository itself. The goal is to make sharing and browsing quality jQuery plugins a pleasant experience for everyone!

jQuery Plugin Registry: plugins.jquery.com
Source/Documentation/Issues: github.com/jquery/plugins.jquery.com

Downloading and Using Plugins

If you’re looking to just browse and use jQuery plugins in your application or site, not a lot has changed. Plugins each have basic pages that provide a link to the plugin download, as well as past versions, documentation, issue tracker, and source code repository. Download links may serve you a zip file with the plugin assets, or link to the best resource to download the build of the plugin you’re looking for.

Registering Your Plugin

Registering your plugin and having it listed on the site is not a complicated process; however, it assumes a number of aspects of the plugin development process, including using version control (git) and providing documentation on how to use it. You also have to include a plugin.jquery.json package manifest file, which provides all the information used to describe your plugin on the registry, including the version number, as well as the locations of the files and the documenation.

To register and publish your plugin, you’ll need to push your code to a public repository on GitHub, and add our post-recieve webhook URL (http://plugins.jquery.com/postreceive-hook) to your repository. The next time you push a semver tag, we’ll take care of registering the plugin name and updating its page on the site. When you’re ready to release the next version of your plugin, just tag and push again!

Users can download your plugin however you’d like them to. You can link directly to a JavaScript file for your users to save into their project, take advantage of the GitHub’s built-in zip file distribution, or even link to a custom build tool you may have online for further configuration.

That’s it — no uploading files to us, no wading through forms, and no manual updates for new versions.

(We plan to support other sites in the future! However, we’ve only been able to implement integration with GitHub at this point. If you’d like to assist with adding services, read on!)

Contributing to the Plugin Registry

Our work building the registry has informed and overlapped with a major initiative we’ve taken to open-source all of the content and design of all jQuery web sites. You’ve already seen part of this launch with the new api.jquery.com and jqueryui.com, and we’ll be talking more about this initiative later this week. As it relates to the Plugin Registry, it means that everything from the site documentation to the styles and templates to the post-receive hook itself is open source. So if you notice bugs or have ideas, you can raise and track issues and file your fixes as pull requests. You can even run a local instance of the site to iterate and test your changes.

Of course, if you’re a plugin author, you can also contribute by publishing your plugins to the registry. Even if you haven’t written plugins of your own, you can help out the authors of your favorite plugins by submitting pull requests that add a plugin.jquery.json manifest to their plugin’s repository.

Be Excellent To Each Other

We know this site has been long in the making, and we’re excited to finally be able to open it up for you to use, whether you’re looking for plugins to use in your app or you want to share your work with other developers. We’re looking forward to seeing lots of new plugins and old favorites make their way into the registry, so if you’re a plugin developer, we encourage you to get started as soon as you can with the registration process.

Name registration is on a first-come, first-served basis, and you can’t reserve a name prior to releasing a plugin. However, we recognize there is a huge ecosystem of jQuery plugins already out there, so especially in these early days of the registry’s existence, we do ask that authors reserve judgment and respect for other popular, widely-adopted plugins that may already have a reasonable historical claim to a particular name, even if it has not yet been registered. By and large, we hope that this will discourage “land grab” registrations, but we may step in to manually resolve a situation, should a particularly egregious case arise. “Squatting” on a plugin name is similarly disallowed, and may result in removal without warning!

(Translation: Ben Alman’s BBQ (Back Button & Query) plugin has long been a popular tool for working with the location.hash for navigation. Now is NOT a good time to create and register a sweet plugin for marking up quotations and call it the jQuery BBQ (<bold>,<blockquote>, & <q> plugin!)

That’s All, Folks

Thanks for your patience. Now go forth and publish! Should you encounter any trouble, please file issues, join us in the #jquery-content channel on freenode, or send an e-mail to plugins at jquery dot com

jQuery 1.9 RC1 and Migrate RC1 Released

Posted on by

Drop everything and start testing, jQuery 1.9 Release Candidate 1 is now available! Today we’re also releasing RC1 of the jQuery Migrate plugin, to help in migrating and upgrading your older jQuery code and plugins. We really need your help to make sure this code is free of bugs and ready to release.

The jQuery 1.9RC1 files are available on jQuery’s CDN. We recommend that you start by including the jQuery Migrate plugin. Be sure to check the browser’s console for warnings, which all start with JQMIGRATE and are described in the plugin’s documentation. Just replace your current jQuery include with this:

<script src="http://code.jquery.com/jquery-1.9.0rc1.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.0.0rc1.js"></script>

For diagnostic purposes, you can also include the jQuery Migrate plugin with versions of jQuery all the way back to 1.6.4 to see what changes may cause issues with your code when you do upgrade. At minimum, please test your site with your existing jQuery version and the jQuery Migrate plugin to see what it reports. Our goal is to make the jQuery Migrate plugin into a tool that can smooth out any bumps in your upgrade road.

If you haven’t looked at the previous 1.9 beta, check out the jQuery 1.9 Upgrade Guide for information about what has changed in this go-round. There’s been quite a bit of API cleanup in 1.9, and the jQuery Migrate plugin is your friend when it comes to finding issues.

In the last beta we introduced a powerful CSS array getter that simplifies and optimizes getting multiple properties. But then we looked, and oh, I dunno, it seemed like this release just needed to “pop” more. So we added more features to make your development life easier.

New! Sizzle Selectors

Sizzle now supports the following additional CSS3 selectors: :nth-last-child, :nth-of-type, :nth-last-of-type, :first-of-type, :last-of-type, :only-of-type, :target, :root, and :lang. That means all those selectors are usable in every browser jQuery supports all the way back to IE6, regardless of native browser support for the selector. There are only three remaining selectors unsupported by Sizzle/jQuery (:link, :visited, and :hover) which we won’t implement due to the overhead of events that would be required to track active elements.

New! .finish() Method

jQuery animations have gotten even better, and our API improved in the process. It all started with a suggestion to eliminate the Boolean trap posed by the .stop(Boolean, Boolean) signature. During that discussion it became clear that we didn’t have a way to handle one of the most useful cases: running all queued animations to their final value. So we added one, .finish(). The best way to show its benefits is with an example.

As you can see from the example, most uses of the .stop() API requiring Boolean arguments can be replaced with some combination of .stop() (with no arguments), .clearQueue() and/or .finish() and be less cryptic. We’re not removing the old behavior though, so any existing code should work fine. We’d prefer that you use .finish() when appropriate, since it reads better and avoids confusing Boolean parameters. And, when you need to go to the end of a whole series of animations, .finish() will do that in 1.9 when nothing would before.

New! Source Maps

jQuery 1.9RC1 has added the ability to use source maps in browsers that support them. At the moment that’s just Google Chrome, but Mozilla Firefox is planning support as well.

What’s all this about? Well imagine that you are using compressed versions of your files on your production site, including a compressed version of jQuery. You get a report that an important customer is running into a problem. You could debug it a lot easier if you had the uncompressed source, but using that on your high-traffic production site isn’t an option. With source maps, you can let the browser’s debugger “map” the lines in the compressed file into the uncompressed source. That makes it so much easier to set breakpoints, inspect or change values, and see meaningful variable names. This video gives you a taste of what it can do.

The jQuery CDN has the map files for this beta version; the jQuery, Google, and Microsoft CDN versions of jQuery final releases will also get matching source maps from now on. If you are using jQuery 1.9 or 2.0 from the CDN, just check the “Use source maps” option in the debugger and you will be set. Open the uncompressed version of jQuery in the Chrome debugger and you can set breakpoints or inspect variable values there, even though the compressed version is being used!

When hosting your own copy of jQuery, copy the map to your server and use it from there. For simplicity we assume that the compressed and uncompressed copy of jQuery is in the same folder as the map file; this is the case for CDN versions and you should follow the same rule if you make local copies. The map file name is the same as the compressed version, with .map replacing .js. Do not rename the files when you copy them. So, if you were to use a local copy of jquery-1.9.0.min.js the corresponding map file would be jquery-1.9.0.min.map and the uncompressed file would be jquery-1.9.0.js in the same folder.

Congrats, Contributors!

Many thanks to the people who have contributed to the 1.9 release: Akintayo Akinwunmi, Alexander Farkas, Allen J Schmidt Jr, Ben Truyman, Bennett Sorbo, Callum Macrae, Carl Danley, Corey Frang, Daniel Gálvez, Dan Morgan, David Bonner, David Fox, Devin Cooper, Elijah Manor, Erick Ruiz de Chavez, Greg Lavallee, Ismail Khair, James Huston, Jay Merrifield, Jonathan Sampson, Julian Aubourg, Marcel Greter, Matt Farmer, Matthias Jäggli, Mike Petrovich, Mike Sherov, Oleg Gaidarenko, Paul Ramos, Richard Gibson, Rick Waldron, Rod Vagg, Roland Eckl, Sai Wong, Scott González, Sebi Burkhard, Timmy Willison, Timo Tijhof, Tom Fuertes, Toyama Nao, and Yi Ming He.

jQuery 1.9.0RC1 Changelog

Ajax

  • #12004: Rename ajax.type to ajax.method
  • #12550: jQuery Ajax cache=false doesn't always work

Attributes

  • #9905: .removeAttr( "id" ) sometimes crashes IE 7
  • #10299: hrefNormalized === false also needs a propHook
  • #12048: [IE6/7/8] xml set attribute
  • #12584: jQuery wrongly serializes &lt;select&gt; with one disabled &lt;option&gt;
  • #12600: jQuery('select').is('[value="value"]') works inconsistently depending on number of elements returned
  • #12945: attr throws exception in IE9 on Flash &lt;object&gt;s
  • #13011: Setting type attribute on an input doesn't work as intended

Build

  • #12254: Reflected XSS
  • #12490: Move submodule update process to grunt
  • #12725: Avoid localized UTF-8 characters in intro.js @DATE
  • #12741: inconsistent line endings in official jquery-1.8.2.js download
  • #12886: Add source map support for build
  • #13044: Execute all QUnit modules in TestSwarm
  • #13064: Improve test suite fixture cleanup

Core

  • #9469: Remove semi-functional .selector calculation from .pushStack()
  • #9904: Move deprecated functionality to compatibility plugin
  • #10417: jQuery.later
  • #11290: selector interpreted as HTML
  • #11737: Remove jQuery.sub
  • #12107: Change proxy to allow arguments currying without overwriting context
  • #12134: implement HTML5 compilant form data construction into $.fn.serialzeArray
  • #12191: jQuery.type() should return "error" for native ECMAScript Error objects
  • #12519: Public API methods should not have private arguments
  • #12840: Remove (private) parameter "pass" from jQuery.attr and jQuery.access
  • #13021: each() cannot work well with a literal object who has a length member
  • #13075: Performance optimization for $.type
  • #13076: Performance optimization (10-30%) for $("some-selector")

Css

  • #11938: jQuery.css should accept an array to get multiple properties
  • #12990: 'px' automatically added to column-count css property
  • #13088: under IE8, $(selector).attr('style') always return lowercase string

Data

  • #10544: Remove ALL special meanings of "." in keys for $.fn.data

Deferred

  • #11405: deferred.notify() invokes progressCallbacks with deferred as context
  • #13160: Deferred.then doesn't propagete custom context

Effects

  • #12803: Smarter hook point for jQuery.timer

Event

  • #3827: Checkbox state inconsistent in click event handler
  • #12061: $(window).beforeunload() clobbers previous handler and return values
  • #12518: Don't use offsetWidth in jQuery.event.trigger()
  • #12610: jQuery.event.dispatch should remove window.event
  • #12736: Move pseudo:hover to jquery-compat / deprecated.js
  • #12739: Name: Passing in an Event to trigger strips namespace
  • #12827: Remove "exclusive" events
  • #12828: Remove event properties: attrChange attrName relatedNode srcElement

Manipulation

  • #4087: insertAfter, insertBefore, etc do not work when destination is original element
  • #9646: IE7: Cloning of form-elements and changing their names also changes the name of the elements that are cloned.
  • #10470: wrap() evaluates scripts
  • #11226: .after and .before returns incorrect data for $('not_existing_element')
  • #11230: .appendTo .prependTo .insertAfter .insertBefore returns incorrect data for $('not_existing_element')
  • #11280: appending elements to an object element fails in IE &lt; 9
  • #11795: Resolve script manipulation/execution inconsistencies
  • #12120: Inconsistency of .end() with respect to .after()
  • #12336: Calling $('#select').empty() should set options length to 0
  • #12392: Elements created from HTML strings have a parentNode
  • #12449: replaceWith() doesn't clone elements where required
  • #12503: before/after will choke if collection has not first disconnected node
  • #12777: Applets don't work when appended on IE
  • #12863: behavior:url(#default#savehistory) causes event error on oldIE
  • #12957: Improve wrapMap
  • #13019: New pre-1.9 .replaceWith() behavior leaks data and events
  • #13094: If to jQuery#before passed function argument it should receive index of the current element in the set

Misc

  • #12758: Make sure Summit new authors are credited

Offset

  • #6446: Mobile Safari 4.0.4: $.offset.top() reports wrong position after scroll

Selector

  • #11115: ".is()" and ".filter()" disagree on attribute selector "[checked]"
  • #12856: Syntax error, unrecognized expression in jquery 1.8+
  • #13070: filter()/is() does not work correctly with attribute equals selector which contains special characters

Support

  • #12569: Improve feature detect for oldIE event bubbling
  • #12869: Support tests affect page layout in IE8/9/10 running in IE7 mode

Traversing

  • #12009: jQueryObject.find(element) corrupts the stack
  • #12816: .find can return elements in the wrong order

jQuery 1.9 Beta 1 Released

Posted on by

You’ve been good boys and girls this year, so look what Santa left under the source tree: jQuery 1.9 Beta 1! We’ve made a lot of changes this time, so we need your help in testing more than ever. Please don’t leave us feeling awkward at the holiday party with that punch bowl full of warm eggnog and the creepy guy from accounting. Just take a few minutes out of your holiday schedule and try this with your code. It’s a gift we will definitely appreciate.

jQuery 1.9 has removed many of the items we deprecated during the last few versions of jQuery. For that reason, we’re introducing the jQuery Migrate plugin. This plugin restores several of the deprecated and removed features so that existing code can run, without changing the code. However, it’s intended as a short-term stopgap and shouldn’t be used for new work. To make migration easier, the development version (linked below) also provides browser console warnings to let you know which obsolete features the code is still using. See the plugin documentation for a list of messages you may see.

To test, we recommend that you start with the jQuery Migrate plugin since it will warn you about any deprecated features the code may depend on. Just include these two script tags in your code, replacing your existing jQuery script include:

<script src="http://code.jquery.com/jquery-1.9.0b1.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.0.0b1.js"></script>

Be sure to update to the most recent versions of jQuery UI and jQuery Mobile if you are also using them.

If the browser’s console does not show any “JQMIGRATE” warning messages generated by the jQuery Migrate plugin, try removing the jquery-migrate include and try jQuery 1.9 in all its squeaky-clean glory. If you have questions, feedback, or complaints about the beta that aren’t specifically bugs, let us know in the jQuery Forum.

Issues regarding the migration plugin not discussed below or in the upgrade guide can be reported at the jQuery Migrate Issue tracker; include a test case that we can use to diagnose the problem. The best way to do that is create a simple test at jsFiddle.net or jsbin.com. You can this jsFiddle tempate or jsbin template as a starting point; they already contain links to the work-in-progress versions of both jQuery and the jQuery Migrate plugin. Add your code there and post a link to it with your bug report.

If you’re seeing problems after fixing any migration issues, removing jQuery Migrate, and using the 1.9 beta by itself, you can report them at the main jQuery core bug tracker. A test case is essential here as well so that we can analyze the problem. Again, if you have questions, feedback, or complaints about the beta that aren’t specifically bug reports, use the jQuery Forum.

What’s New

The majority of work in 1.9 has revolved around API cleanup. Changes most likely to affect existing code are listed in the jQuery 1.9 Upgrade Guide, and these changes will also carry over to 2.0. The jQuery Migrate plugin will identify many of these issues for you automatically, so it’s good to use the plugin in your initial testing to see if it identifies anything that needs to be changed.

We couldn’t let a version like this escape without adding at least one new feature; it’s a good one.

$(element).css([ name1, name2 … ]): This is a new getter that retrieves multiple CSS properties for the first element in a collection and returns them as an object with properties. In addition to the shorter code, this signature provides up to 25 percent better performance because it can use the same return value from the browser’s `.getComputedStyle()` method rather calling the method for each css property. Typical use might be like this:

var dims = $("#box").css([ "width", "height", "backgroundColor" ]);
//  { width: "10px", height: "20px", backgroundColor: "#D00DAD" }

Finally, no major version would be complete without fixes for a variety of bugs and peculiar edge cases that you’ve discovered and reported on the bug tracker. Those, along with all the other modifications, are all cataloged in the changelog below.

How It’s Made

Possibly the most exciting news of this beta is that so many contributors — new and veteran — worked to make jQuery better. Our first jQuery Developer Summit in October brought in some incredibly skilled developers that we hope will continue to stay with us, and several new contributors dared to tackle bugs that have been open for more than a year! If you’re interested, you can help out too.

Let’s give a round of applause to the people who contributed their code gifts to this 1.9 beta: Akintayo Akinwunmi, Alexander Farkas, Allen J Schmidt Jr, Ben Truyman, Bennett Sorbo, Callum Macrae, Carl Danley, Corey Frang, Daniel Gálvez, Dan Morgan, David Bonner, David Fox, Devin Cooper, Elijah Manor, Erick Ruiz de Chavez, Greg Lavallee, Ismail Khair, James Huston, Jay Merrifield, Jonathan Sampson, Julian Aubourg, Marcel Greter, Matt Farmer, Matthias Jäggli, Mike Petrovich, Mike Sherov, Oleg Gaidarenko, Paul Ramos, Richard Gibson, Rick Waldron, Rod Vagg, Roland Eckl, Sai Wong, Scott González, Timmy Willison, Timo Tijhof, Tom Fuertes, and Yi Ming He. If you happen to see them under the mistletoe … well, you know what to do.

jQuery 1.9 Beta 1 Change Log

Ajax

  • #12004: Rename ajax.type to ajax.method
  • #12550: jQuery Ajax cache=false doesn't always work

Attributes

  • #10299: hrefNormalized === false also needs a propHook
  • #12048: [IE6/7/8] xml set attribute
  • #12584: jQuery wrongly serializes select with one disabled option
  • #12600: jQuery('select').is('[value="value"]') works inconsistently depending on number of elements returned
  • #13011: Setting type attribute on an input doesn't work as intended

Build

  • #12254: Reflected XSS
  • #12490: Move submodule update process to grunt
  • #12725: Avoid localized UTF-8 characters in intro.js @DATE
  • #13044: Execute all QUnit modules in TestSwarm
  • #13064: Improve test suite fixture cleanup

Core

  • #9469: Remove semi-functional .selector calculation from .pushStack()
  • #9904: Move deprecated functionality to compatibility plugin
  • #10417: jQuery.later
  • #11290: selector interpreted as HTML
  • #11737: Remove jQuery.sub
  • #12107: Change proxy to allow arguments currying without overwriting context
  • #12134: implement HTML5 compilant form data construction into $.fn.serialzeArray
  • #12191: jQuery.type() should return "error" for native ECMAScript Error objects
  • #12519: Public API methods should not have private arguments
  • #12840: Remove (private) parameter "pass" from jQuery.attr and jQuery.access
  • #13021: each() cannot work well with a literal object who has a length member

Css

  • #11938: jQuery.css should accept an array to get multiple properties
  • #12990: 'px' automatically added to column-count css property

Data

  • #10544: Remove ALL special meanings of "." in keys for $.fn.data

Deferred

  • #11405: deferred.notify() invokes progressCallbacks with deferred as context

Effects

  • #12803: Smarter hook point for jQuery.timer

Event

  • #3827: Checkbox state inconsistent in click event handler
  • #12061: $(window).beforeunload() clobbers previous handler and return values
  • #12518: Don't use offsetWidth in jQuery.event.trigger()
  • #12610: jQuery.event.dispatch should remove window.event
  • #12736: Move pseudo:hover to jquery-compat / deprecated.js
  • #12739: Name: Passing in an Event to trigger strips namespace
  • #12827: Remove "exclusive" events
  • #12828: Remove event properties: attrChange attrName relatedNode srcElement

Manipulation

  • #4087: insertAfter, insertBefore, etc do not work when destination is original element
  • #9646: IE7: Cloning of form-elements and changing their names also changes the name of the elements that are cloned.
  • #10470: wrap() evaluates scripts
  • #11226: .after and .before returns incorrect data for $('not_existing_element')
  • #11230: .appendTo .prependTo .insertAfter .insertBefore returns incorrect data for $('not_existing_element')
  • #11280: appending elements to an object element fails in IE &lt; 9
  • #11795: Resolve script manipulation/execution inconsistencies
  • #12120: Inconsistency of .end() with respect to .after()
  • #12392: Elements created from HTML strings have a parentNode
  • #12449: replaceWith() doesn't clone elements where required
  • #12503: before/after will choke if collection has not first disconnected node
  • #12777: Applets don't work when appended on IE
  • #12957: Improve wrapMap
  • #13013: Move jQuery.buildFragment() to compat plugin
  • #13019: New pre-1.9 .replaceWith() behavior leaks data and events

Misc

  • #12758: Make sure Summit new authors are credited

Offset

  • #6446: Mobile Safari 4.0.4: $.offset.top() reports wrong position after scroll

Selector

  • #11115: ".is()" and ".filter()" disagree on attribute selector "[checked]"
  • #12856: Syntax error, unrecognized expression in jquery 1.8+

Support

  • #12869: Support tests affect page layout in IE8/9/10 running in IE7 mode

Traversing

  • #12009: jQueryObject.find(element) corrupts the stack
  • #12816: .find can return elements in the wrong order

NOTE: Please do not report bugs or other problems via blog comments!

jQuery Color 2.1.1 Released

Posted on by

Just a quick announcement: jQuery Color 2.1.1 is now released! This adds a few bug fixes to the 2.1.0 release and I would suggest upgrading as soon as possible to avoid encountering these bugs.

Changelog

  • Ensure white and black both have a saturation of 0 to keep them in greyscale color space.
  • Add support for ‘.25’ instead of ‘0.25’ for alpha string parsing

Download

Thanks!

Special thanks going out to Mike Sherov, Ben Olson, Dmitry, and antoniojrod for helping with this release!

Issues

As always, if you encounter any issues, please do not post replys on this blog post, instead visit jquery-color issues on github.