jQuery 1.8.2 Released

Posted on by

We’re pleased to announce that jQuery 1.8.2 is available! This version fixes several bugs and performance regressions reported from the past couple of releases, and we think the 1.8 line is pretty solid at this point. The only way to know for sure that it works with your code is to test it–so please do!

As always, we have put out the jQuery-shaped signal lights; the master control centers at the Google and Microsoft CDNs are on high alert and will soon post these files. For immediate relief, please use the copies above. If you find a problem, please post a bug report and be sure to include a test case from jsfiddle.net or jsbin.com.

The complete change log for jQuery 1.8.2 is below. If this is your first upgrade to the 1.8 line, be sure to read the blog entries for 1.8.0 and 1.8.1 to see what’s changed.

Many thanks to the patch contributors for this version; ye shall know them by their GitHub handles: timmywil, gibson042, rwldrn, joyvuu-dave, jaubourg, staabm, and sindresorhus. In addition, we thank all the community members who took the time to contribute quality bug reports with test cases. Your initial groundwork makes it possible for us to find and fix bugs.

jQuery 1.8.2 Change Log

Deferred

  • #12521: Deferred.promise( target) only works fine when typeof( target)=='object'

Event

  • #12423: jQuery breaks with Comcast Protection Guard and any anti-keylogging protection software on IE7+
  • #12436: Performance degradation with delegate events and pseudo-classes

Misc

  • #12229: Some inconsistencies/optimizations

Offset

  • #12534: .offset() throws an error on BlackBerry5 and iOS3
  • #12536: Make .offset() calc less wrong on browsers w/o getBoundingClientRect

Selector

  • #12303: Attribute selector fails if the attribute value contains :first :last
  • #12337: :nth-child selector not accurate after new child element added
  • #12361: seleter has bug
  • #12448: :contains() edge case throwing an error
  • #12492: In textarea focus event handler, $(this).is(':focus') == false in Chrome & Safari
  • #12523: JQuery renders line breaks as text nodes
  • #12526: :last selector fails to find a match
  • #12541: 1.8.0 and 1.8.1: Double :not() selector fails in IE6/7
  • #12572: :contains breaks searching iframes v1.8

Traversing

  • #12474: Using find on a collection with append does not return the correct elements

jQuery UK 2013

Posted on by

jQuery UK is back for 2013!

The jQuery Foundation is pleased to announce that White October are organising another jQuery UK  conference in Oxford, UK on the 19th of April 2013.

There is a call for papers and suggestions for speakers are also welcome. So if you want to take part, or want to see someone at jQuery UK you know what to do.

A very small number of tickets are on sale until the call for papers finishes on the 11th of October for a “blind bird” price of £130 + VAT.

The full speaker lineup should be announced winter 2012 and the early bird tickets will go on sale at the same time for £160 + VAT.

We’ve also listed it on Lanyrd.com if you’d like to follow along there!

jQuery Licensing Changes

Posted on by

Some important changes have occurred in the latest releases of several jQuery projects such as core, UI, Mobile, Sizzle, and QUnit. You may not have noticed them because they didn’t really change the actual code, documentation, or functionality. Instead, these changes were designed to clarify the ownership and licensing of the software. If you’re not a lawyer, most of this won’t make a lot of difference to you, but it’s important to us.

One simplification we made was to remove the GNU General Public License (GPL), leaving only the MIT License. Having just one license option makes things easier for the Foundation to manage and eliminates confusion that existed about the Foundation’s previous dual-licensing policy. However, this doesn’t affect your ability to use any of the Foundation’s projects. You are still free to take a jQuery Foundation project, make changes, and re-license it under the GPL if your situation makes that desirable. The Free Software Foundation site confirms that the MIT License is a “lax, permissive non-copyleft free software license, compatible with the GNU GPL.”

Over time, more than 500 people have contributed to the projects currently managed by the jQuery Foundation. We’re working hard to make sure that everyone who has contributed gets the credit they deserve. Many of the projects now have an AUTHORS.txt file in their root that list all the major contributors in chronological order. Scott González did a lot of the heavy lifting to get the author lists in order, and created useful tools so that we can keep them that way. Of course, you can always see the author of a specific change to a project by looking at the commit in the git log or on GitHub.

It’s important to the jQuery Foundation that licensing of the code and documentation is clear, so the community can continue to use it without interruption. Doing so requires a “paper trail” so it is unambiguous that the Foundation has permission to use the code and the contributor had the ability to contribute that code in the first place. For an example of the latter, think about the situation where an employee works on jQuery Foundation projects at the company office; their employer might claim they own that work and the employee had no right to license it to the Foundation.

To make the licensing clear, contributors are asked to sign a Contributor License Agreement (CLA). jQuery team members will sign a Copyright Assignment Agreement (CAA) which actually assigns the copyright to the jQuery Foundation. For more discussion of what a CLA or CAA does, see this article.

All of these changes guarantee that the jQuery Foundation’s open source projects will be dependable resources for developers and businesses. They also ensure that when you contribute, you’ll get some recognition for the work that you’ve done. So with all that legal stuff out of the way, come help us build the jQuery Foundation projects!

Help Us Money-ify UglifyJS 2.0

Posted on by

In nature, an ecosystem consists of the organisms, raw materials, and all of the complex interactions that shape their shared environment. The open source ecosystem is no different. Each project has its niche, and any package that is a dependency of course has dependencies of its own. jQuery is used on millions of websites, but we wouldn’t be there without the excellent tools on which we rely to build, test, and distribute our code.

One such tool is Mihai Bazon’s excellent UglifyJS. We’ve been using Uglify to compress jQuery, jQuery UI, and jQuery Mobile for nearly two years now, so if you’ve used any of our minified builds recently, you’ve benefited from Mihai’s work. Recently, he began work on UglifyJS 2.0, which will feature even better compression, support for source maps, and a command line utility. He also announced a Pledgie campaign to support his efforts.

Here at the Foundation, our goal is not just to improve libraries that start with “jQuery,” but rather the entire JavaScript ecosystem in which we all participate. That’s why we’re happy today to announce some exciting news – and to issue a challenge!

Help build UglifyJS 2.0!
Click here to lend your support to: Funding development of UglifyJS 2.0 and make a donation at www.pledgie.com !

We’ve just kicked in 500€ to the campaign to recognize his work so far, but there’s more we all can do. If the community can help us to help Mihai reach his goal of 3,000€  by the end of September, we’ll donate an additional 500€ to the UglifyJS 2.0 project!

We’re looking forward to keeping you posted on the progress here, and participating in similar endeavors in the future to help improve the tools we use each day. In the meantime, thanks for considering a donation (even a small one), and if we haven’t convinced you yet, perhaps this final exhortation will: THINK OF THE BYTES!

Update (5:30): Awesome! The Dojo Foundation has matched our donation!

jQuery Developer Summit 2012

Posted on by

Over the last eight months at the Foundation, we have been working to expand both the reach and breadth of our events, and we’re excited today to announce the inaugural jQuery Developer Summit, to be held October 15th and 16th, 2012 at the Aol Campus in Dulles, VA.

The Developer Summit will be a departure from our traditional events. Instead of two days of speakers and slide decks, we’re going to spend a morning giving you a rundown of how jQuery works, from internals of jQuery Core, to how we build and test the libraries, to how we manage our websites. Then we’ll break apart into teams, and spend the rest of our time working together to collaborate on the projects and tools we all use every day.

As this is a more intimate event (and because it’s our first time trying it), we can only accomodate about 150 people. In order to get the right mix of skills and experiences into the room, it won’t be a simple first-come, first-served process. Instead, we’ll be accepting and reviewing submissions to this application on a rolling basis from August 31st until September 7th. In other words, we have a lot of different bases we’d want to cover, so we can’t have 100 people showing up who just want to fix edge case bugs in Quirks mode!

The focus here is on collaboration, growing as an open-source developer, and having fun! If this sounds like your cup of tea, read more about the Developer Summmit now, and consider applying! And of course, if you have any questions, please don’t hesitate to ask!

jQuery 1.8.1 Released

Posted on by

It’s been a frantic but productive few weeks, and the jQuery core team is pleased to announce that jQuery 1.8.1 is released! This version fixes the issues reported by the community following the final release of 1.8.0. Here are the files, ready for you to use:

The Google and Microsoft CDNs will also have copies available soon.

The final set of bugs that were fixed are listed below. Don’t forget, folks, we love to hear about bugs in the betas and release candidates too! You don’t have to wait for a final release to test with your code. The earlier we can fix these bugs, the smoother things go for both the team and the jQuery community.

Use jQuery UI 1.8.23 and jQuery Mobile 1.1.1 or later for best compatibility with jQuery core 1.8.1.

Don’t use Quirks mode! jQuery has never supported Quirks mode and we do not perform any testing in Quirks. This can affect values like $("window").height(), and the jQuery 1.8 Quirks mode results did change in order to support some modern browser features. The majority of problem cases we’ve seen are from developers that wanted to be in Standards mode but had an invalid doctype or extraneous markup before their <html> tag. When in doubt, use the simple and short <!doctype html>.

Sizzle’s custom pseudo-selectors that take arguments have changed, but jQuery 1.8.1 provides a compatibility shim for older code. Neither Sizzle nor jQuery documented how these worked before; there is now official documentation for Sizzle. Look there for an example of best practice on writing custom pseudo-selectors that work with all versions of jQuery.

Many thanks to the team and community members who contributed patches for this release: Timmy Willison, Mike Sherov, Elijah Manor, Mike Pennisi, Richard Gibson, Corey Frang, Mathias Bynens, Oleg Gaidarenko, Nikita Govorov, Julian Aubourg, and Rick Waldron.

We’re also very appreciative to those of you who took the time to create good bug reports for jQuery 1.8.1. In the highly unlikely event we somehow managed to leave any bugs in this release, please do let us know. First check the bug tracker to see if it has already been reported. If not, create a test case using jsFiddle.net or jsbin.com with the least possible code that it takes to demonstrate the problem.

jQuery 1.8.1 Change Log

Ajax

  • #12233: jQuery.post() raises "RangeError: Maximum call stack size exceeded"
  • #12234: the .load() method,when params is null, the ajax type will be "POST", but not be "GET"

Core

  • #12282: 1.8.0 regression – document ready is fired too early on IE 9/10
  • #12329: event.js still has a reference to bindReady
  • #12350: jQuery.trim should remove byte-order-mark (BOM) characters
  • #12370: jquery android 2.1-update1 problem

Css

  • #12235: getComputedStyle is used without namespace
  • #12313: .height() and .width() no longer fall back to CSS if offsetWidth is undefined.
  • #12324: cssNormalTransform can produce wrong values

Data

  • #10863: .data method does not return an object if the JSON string contains newlines.

Dimensions

  • #12283: jQuery 1.8 outerHeight is returning undefined instead of null

Effects

  • #12273: animate fails with 0 duration

Event

  • #12149: 'change' event handler leaks in IE7/8
  • #12383: jQuery.on() selector should only apply to descendants of the element

Manipulation

  • #12346: fn.append not working correctly
  • #12384: .after fails with table rows in IE9

Queue

  • #12278: .promise(type) not working for non-default queue

Selector

  • #12205: Miscellaneous pseudo selector issues
  • #12237: Having child selector and multiple :not with :visible does not work any more
  • #12241: Passing a negative index for :eq throws a syntax error.
  • #12285: Selector with :not(:first) isn't working since 1.8
  • #12292: Invalid selectors can cause a subsequent valid selector not to work
  • #12303: Attribute selector fails if the attribute value contains :first :last
  • #12311: jQuery 1.8 and .is(":visible")
  • #12314: $.contains fatal error in IE9 when 2nd parameter is null
  • #12359: 1.8.0 creating invalid tag/attribute when loading the library
  • #12369: ajax, use find method for read xml
  • #12403: Selector "> li > :first-child,> :not(li):even" fails in old IE
  • #12409: Back-compat issue with custom pseudo selectors
  • #12412: Sizzle regression ":not([data-role='list-divider']):not(:hidden)"
  • #12419: Composite selector fails if id attribute contains dot.

Support

  • #12333: $.browser.webkit (undefined) -> $.browser.chrome

jQuery Color 2.1.0

Posted on by

Early last week I released jQuery Color 2.0.0, the wait for a jQuery Color plugin that gives you an API to work with colors is over.

What’s new in jQuery Color 2.0.0?

jQuery Color has faithfully supported animating colors between two hex values since the beginning. Many developers asked for access to the internal functions we had declared to make it all possible. Version 2 now includes an API to create and modify colors, as well as support for RGBA & HSLA colors and animations.

You can read more about the API and features on the repository readme.

Any issues should be reported on the issue tracker.

Why jQuery Color 2.1.0 already?

It’s every developers dream to land a major version perfectly on the first release, but it is rarely achieved. In the last two weeks a few minor bugs that were left in 2.0.0 have been fixed, and a new function was added to the API which should help support SVG style properties.

Download jQuery Color 2.1.0

You can download the release from our CDN provided by Media Temple.

In order to save on file size, the jQuery Color plugin only supports the Basic color keywords by default, the Extended Color Keywords are included in a separate file. If you want to include both, you can also download the bundled version.

Credits

Thanks go out to Dan Heberden, Scott González, Jörn Zaefferer, Mike Sherov, Brendan Byrd, and Christoffer Sawicki who helped make this release happen.

jQuery 1.8 box-sizing: width(), css(“width”), and outerWidth()

Posted on by

One of the great new features in jQuery 1.8 is a built-in understanding of box-sizing: border-box which is supported by every modern browser. (Sorry, IE6 and IE7, please take one step back; I said modern browser.)

If you showed people an element with a border on the screen and asked them the width of that element, they would naturally measure from the outside edges of the border. Yet that’s not the way CSS works in its default content-box mode. Normally, CSS width and height only include the “content” inside the border and padding. As a result, designers (and jQuery) often need to add the width to the right/left padding and border to get the “natural” width of the element.

Using box-sizing: border-box changes the CSS notion of the width of an element to include both the padding and the border dimensions, just the way you’d naturally measure it. jQuery versions before 1.8 were not fully trained in the ways of the border-box, but we’ve fixed this bug.

One thing that hasn’t changed is the return value of the .width() method. As it’s always been documented, it gets and/or sets the “content” width of an element, and that is regardless of the CSS box-sizing being used by the element. However, jQuery 1.8 now needs to check the box-sizing property whenever you use .width() so that it can decide whether it needs to subtract out the padding and border width. That can be expensive—up to 100 times more expensive on Chrome! Fortunately, most code doesn’t use .width() enough times for this to be noticeable, but code that gets the width of dozens of elements at once could be impacted.

There is a very easy way to avoid this performance penalty if it does impact your code. Simply use .css("width") instead of .width() to make it clear you want to get or set the actual width of the element as specified by the CSS. That doesn’t require jQuery to look at box-sizing. Remember, however, that .css("width") as a getter returns a string with “px” at the end, so you’ll want to use something like parseFloat( $(element).css("width") ) for situations where the result must be numeric.

And of course, everything mentioned here about .width() also applies to .height() as well; use .css("height") to skirt the performance penalty there.

Using .outerWidth() as a setter

In other dimensionally related news, jQuery’s .outerWidth() and .outerHeight() methods have been updated in 1.8 so that they can be used as setters. (jQuery UI has supported them as setters since UI version 1.8.4, but now it’s built into core.) To use .outerWidth() as a setter, pass an argument that is a number representing the outer width (CSS “content” width, plus padding and border width). And yes, this handles the box-sizing: border-box situation fine as well; it’s basically the same as setting the .css("width") in that case.

We’ve received a few reports from people who had problems with .outerWidth() in jQuery 1.8 because it was returning the jQuery object instead of a numeric width. This happens if you call $(element).outerWidth(0) for example. Before jQuery 1.8, this was an invalid use of the API because it was documented to accept a single Boolean argument. However, it treated the invalid argument as a Boolean and returned the width. In 1.8, jQuery uses the value 0 to set the width, and like most setters it returns the jQuery object.

We’re in the process of updating the API documentation for all the changes to 1.8, but for now you can refer back to the changelog in the jQuery 1.8 announcement to see what’s changed.

jQuery 1.8 Released

Posted on by

August just got a little hotter, because jQuery 1.8 final code is here! You can pick up the code from jQuery’s CDN:

As usual, the Google and Microsoft CDNs will also have the file soon. Please don’t ask us about when they’ll be there, we don’t know and we don’t control those CDNs! Use our copies directly from the jQuery CDN above if you’re just itching to get started. It’s the same bits.

We don’t expect to get any bug reports on this release, since there have been several betas and a release candidate that everyone has had plenty of opportunities to thoroughly test. Ha ha, that joke never gets old. We know that far too many of you wait for a final release before even trying it with your code. So now there is really no reason to wait, and you can find out if there are any bugs you could have reported earlier.

If you do find a bug, please create a test case on jsFiddle or jsbin and file a bug on our bug tracker. If you’re not sure whether you’ve found a bug, ask on our forum. jQuery core 1.8.0 is compatible with the latest versions of jQuery UI (1.8.22), and jQuery Mobile (1.1.1). Be sure to update those if you’re reporting bugs on pages that involve them.

A Whirlwind Tour of jQuery 1.8

Let’s just recap the big changes in this release:

Sizzle re-architected: jQuery’s selector engine is faster than ever, thanks to a rewrite (well, really two rewrites) by Timmy Willison. Sure, most browsers have querySelectorAll nowadays, but nearly every implementation falls short in one way or another, creating a road full of cross-browser potholes. Sizzle smoothes that road for you. Plus, you may want those useful jQuery selector extensions like :has() with a complex selector or :contains(). Oh yeah, and there’s still IE6/7 support.

Animations re-imagined: Over time, the animation code in jQuery had become kind of messy. Corey Frang took a head-first dive into that swamp and managed to remove most of the alligators, um, bugs. Most of the changes are under the covers, so existing animations should just work (and work better). But there are also some awesome additions to make animations more general and extendable. One notable and very cool feature is the use of the progress callbacks in Promises. We’re still working on detailed documentation, but we do have a draft. Also, here’s an example of the new code in action: http://jsbin.com/odocid/1/edit.

Automatic CSS prefixing: When you use a CSS property, in either .css() or .animate(), we’ll use the correct prefixed property (when appropriate) for that browser. For example, take .css("user-select", "none"); in Chrome/Safari we’ll set the value as "-webkit-user-select", Firefox will use "-moz-user-select", and IE10 will use "-ms-user-select".

More flexibility with $(html, props): In jQuery 1.8, you can use any jQuery method or plugin in the object passed to $(html, props). Before, you could only use a short list of method names, and there was no documented way to add to the list. Now there doesn’t need to be a list at all! Be aware, however, that this can cause the behavior of your code to change if plugins are added later that have the same names as HTML attributes.

More than 160 bugs closed: The Sizzle and animation rewrites in particular provided the impetus to fix several long-standing bugs–some of which have been around for two or three years. Mike Sherov tackled most of the open CSS and positioning issues, getting us down to near-zero bugs there. We also haven’t given up and are still pounding away to eliminate annoying differences between IE 6/7/8 and modern browsers, so you don’t have to deal with them.

Smaller code size: Despite all the code cleanup, new features, and bug fixes, the gzipped file size of jQuery 1.8 is actually a few hundred bytes smaller than jQuery 1.7.2. Size reduction wasn’t our primary goal in this version, but we felt it was important to hold the line on code growth, and we definitely achieved that. Many thanks to Richard Gibson for leading the code-crunching charge across the entire project.

Modularity: If you know your project’s jQuery dependencies well, you can use the new grunt-based build system to strip out parts of jQuery that you know you don’t need. What we’ve done here for 1.8 is really just a beginning, you’ll see even more flexibility as we move to later versions.

The full changelog is available below, in case you’re wondering whether your favorite bug was squashed.

What’s Been Removed

The short answer is “very little”. We wanted to provide a generous notice period for deprecated features that will be removed in 1.9, to give people time to adapt their code. Several of the things removed in 1.8 were undocumented internals that some people have cleverly reverse engineered, but it’s always risky to use undocumented features. Here are the items removed:

$(element).data(“events”): In version 1.6, jQuery separated its internal data from the user’s data to prevent name collisions. However, some people were using the internal undocumented “events” data structure so we made it possible to still retrieve that via .data(). This is now removed in 1.8, but you can still get to the events data for debugging purposes via $._data(element, "events"). Note that this is not a supported public interface; the actual data structures may change incompatibly from version to version.

Deferred.isResolved() and Deferred.isRejected(): Calling N-1 boolean methods to get the state of an N-state variable was getting a bit silly, so we added Deferred.state() in jQuery 1.7 to tell you the state in a single call. So, these two older methods aren’t needed anymore. It’s much more convenient for debugging scenarios where you often want to know the state of a Deferred as a string.

$(element).closest(Array) returning Array: This was a strange signature of the .closest() method intended for use by the old .live(), but not used by any other code as far as we know. Normal uses of .closest() returning a jQuery object are not affected by this signature being removed.

$.curCSS: This method was simply an alias for jQuery.css() from jQuery 1.3 onward. Although it has never been part of the documented API, some external code has been known to use it, perhaps thinking it was “more efficient.” Now it’s “more gone.”

$.attrFn: Yet another undocumented item, used to define which methods could be used in conjunction with $(html, props) signature. Although it serves no functional purpose in jQuery 1.8, we are leaving an empty $.attrFn in jQuery to prevent code that uses it from throwing errors. Fair Warning: This will be removed entirely in jQuery 1.9, so update your code!

Where Credit’s Due

This release couldn’t have happened without the hard work of the talented jQuery Core team: Julian Aubourg (jaubourg), Corey Frang (gnarf), Richard Gibson (gibson042), Mike Sherov (mikesherov), Rick Waldron (rwaldron), and Timmy Willison (timmywil).

Special recognition goes to these jQuery team and community members who supported the Core team with patch contributions during the jQuery 1.8 development cycle: Andy Monat, Robert Katic, Joaoh Bruni, Sindre Sorhus, Oleg Gaidarenko, Yehuda Katz, Timo Tijhof, Dominik D. Geyer, Scott González, Jörn Zaefferer, Matt Farmer, Trey Hunner, Jason Moon, Ben Alman, Jeffery To, Kris Borchers, Daniel Herman, Vladimir Zhuravlev, Jacob Thornton, Chad Killingsworth, Nowres Rafid, David Benjamin, Uri Gilad, Chris Faulkner, Elijah Manor, and Daniel Chatfield.

We’re also very thankful to those of you who took the time to report bugs; we can’t possibly fix a bug unless we know it exists. If you’re looking for an easy way to contribute to jQuery, get to know the bug tracker and help us by creating reduced test cases that clearly demonstrate bugs. Once we can reproduce a problem, a solution usually isn’t too far away. Those test cases become the foundation for a unit test that can prevent the problem from happening when we change code in later revisions.

jQuery 1.8 Change Log

Ajax

  • #8205: JSONP random result is causing memory leak in IE8
  • #8653: jQuery.param outputs "null" and "undefined" in the query string
  • #9399: Deprecate jqXHR.success and jqXHR.error
  • #10285: evalScript rcleanScript replacement fails in IE8
  • #10524: jQuery.fn.load does not merge data parameter with jQuery.ajaxSetup
  • #10944: $.ajax does not always return an object implementing the Promise interface
  • #11013: Deprecate use of Deferred/Promise with sync $.ajax
  • #11402: evalScript function fails with error error 80020101 in IE
  • #11743: jQuery silently ignores errors during script tag ajax request in $.appendTo()
  • #11778: Cached XHR requests should still resolve asynchronously
  • #12122: jQuery.ajax() async deprecate use with $.Deferred

Attributes

  • #11153: jQuery 1.7 Strips Carriage Returns in IE 8
  • #11212: Sizzle.getText converts unbreakable space into whitespace on IE
  • #11547: XML DOM .removeAttr() doesn't remove cased attributes
  • #11962: Standardize getter return values for empty sets.
  • #12127: Clone does not correctly copy checked state in IE10

Build

  • #11767: Support custom build without effects
  • #11789: Update README to describe grunt build system
  • #11856: modularize dimensions
  • #11857: modularize css
  • #11865: modularize offset
  • #11965: Create deprecated.js to contain as much of the deprecated stuff as possible
  • #12059: `grunt custom` should minify – also should add excluded modules to headers
  • #12158: jQuery 1.8rc1 does not work with YUICompressor 1.4.7

Core

  • #10657: Deprecate jQuery#size() in favor of jQuery#length
  • #11290: selector interpreted as HTML
  • #11470: Adding a builtin readyP promise
  • #12018: $(document).ready() fires too early in IE8
  • #12026: Let $(html, props) use any jQuery.fn method

Css

  • #10373: `document.defaultView` => `window`
  • #10394: jQuery.cssHooks.opacity throws exception on non-IE browsers
  • #10413: width, innerWidth, innerHeight, outerWidth, outerHeight are inaccurate for a "box-sizing: border-box" child of hidden parent
  • #10679: CSS3 vendor prefix support
  • #11004: getWH incorrectly removes padding and border width when box-sizing is border-box
  • #11787: Remove jQuery.curCSS
  • #12088: Webkit now returning percentages for more getComputedStyle properties
  • #12148: hide event don't fire when toggle

Data

  • #7579: jQuery.data() truncates numbers taken from data-xxx attributes
  • #10589: Remove $.fn.data("events")
  • #11435: Obsolete test code to remove toJSON from .data's return value

Deferred

  • #11010: Make Deferred.then == Deferred.pipe like Promise/A
  • #11011: Allow traditional options object for $.Callbacks flags
  • #11736: Remove Deferred .isResolved() and .isRejected()
  • #11749: Preserve context objects when multiple Deferred object are passed to $.when()

Dimensions

  • #6724: wrong $(window).height() in mobile safari (iphone)
  • #10877: Make outerWidth/Height a setter
  • #11293: Reading width or outerWidth of empty TDs alters columns width values
  • #11604: Switch $(elem).width(-val) from no-op to $(elem).width(0)
  • #11724: $(document).height() changed in Firefox 12

Effects

  • #7109: animate width starts with invalid width on webkit
  • #7157: Animation callback shows element is still ":animated"
  • #8387: flickering problem with jQuery 1.5 hide/show issue with inline and inline-block elements on webkit browsers
  • #8627: .animate() fails on letterSpacing in IE (regression in 1.5.1)
  • #8892: Callback is raised before objects are shown with fadeIn() and jQuery.fx.off = true
  • #9217: javascript error in IE8 when animating element is removed before animation finishes
  • #9505: animate() issue when mixing percentages and pixels in WebKit
  • #11635: Explicit overflow:auto is overridden by inline overflow:hidden during animation
  • #11755: animate and it aliases should not use :hidden selector
  • #11797: New animation related events
  • #11854: percentage animations jump to end
  • #11971: Animating background-position fails in IE8
  • #11999: Incremental animation on fixed div does subtraction instead of addition in Chrome.
  • #12117: overflow hidden not properly set when animating to 0 height or width
  • #12138: fadeOut doesn't work in Chrome on basic SVG elements
  • #12150: border-spacing property accumulates when rows are shown and hidden

Event

  • #8545: Leak with events in IE
  • #10067: Firing $.ready on document.readyState === 'interactive' too
  • #10895: The doScrollCheck ie hack in bindReady degrades ie7 performance for no reason whatsoever
  • #11101: Deprecate "exclusive" events option from trigger method
  • #11315: Problems with delegate() and :first in nested elements with equivalent classes
  • #11328: Ctrl key doesn't set event.metaKey to true on Windows
  • #11382: Mouseenter doesn't fire on a disabled input element
  • #11500: Bug : "change" event handler not executed when triggered manually on IE7 & IE8
  • #11621: Triggering a event on document doesn't bubble to window
  • #11718: Deprecate .data() events
  • #11719: Deprecate .bind("ready") event
  • #11731: Deprecate "hover" pseudo-event
  • #11733: Deprecate .load(), .unload(), and .error() methods
  • #11764: Allow delegated non-native events on disabled elements
  • #11786: Deprecate .toggle( handler, handler, … ) signature
  • #12203: .undelegate() with no arguments unbinds all handlers from the parent element

Manipulation

  • #8894: appendTo() and alike methods called after clone() returns incorrect jQuery set in IE
  • #10324: Clone does not copy innerHTML of object element in IE9
  • #11231: Append, Prepend, After, Before should accept an array as first argument
  • #11325: Improve domManip/buildFragment/clean
  • #11338: Inconsistent behavior with .replaceWith() and disconnected nodes.
  • #11528: ie8 serialization bug with .html() also hitting html5 tags
  • #11566: node.append et al. does not work when node is a DocumentFragment
  • #11617: Define a $.parseHTML method for creating HTML fragments
  • #11809: Memory leak in .text(val) setter?
  • #11898: prevAll() with a complicated :not() selector returns results in wrong order
  • #12132: IE10 bug when cloning an object element without a parentNode

Offset

  • #10996: Simplify offset()
  • #11823: Remove webkitConvertPointFromNodeToPage

Selector

  • #3778: selector matching issues
  • #5568: Selectors behave differently with comments tags on FF/IE
  • #7596: xpath selector attribute name with brackets [] fails
  • #8473: In IE9rc *[tabIndex] select all elements without tabindex also
  • #8906: .(prevAll('span:has(input,select,textarea)')
  • #9400: Deprecate :text, :radio, :checkbox, etc. selector extensions
  • #9810: Rewrite Positional Selector Logic
  • #10003: Regression/BC break from #6963
  • #10074: Chaining two [] selector with :first not working
  • #10499: :nth-child() inside :has() treated as if outside it
  • #10570: :text selector throws an error in IE7 when there is a cross domain iframe on the page
  • #10697: Sizzle revamp
  • #10799: Inconsistent results with [name="name"] selectors (also breaks .has)
  • #10809: incorrect test using ".activeElement" in the :focus pseudo-class resolver
  • #11109: Sizzle: Expr.relative truncates prematurely
  • #11120: Tabs in some selectors break in IE7
  • #11814: Sizzle's element-rooted QSA strategy (i.e. attaching a temporary id) does not account for comma and other other selector divisions
  • #11826: Explore a parsed caching system for matchesSelector within Sizzle
  • #11902: :not + :contains selectors
  • #11918: :eq selector problem when using tag name with ':'
  • #11959: Add support for :active selector
  • #11961: "Maximum call stack size exceeded" when using jQuery#is
  • #11966: descendant selector
  • #11969: Missing null check when gathering siblings
  • #12054: Uncaught TypeError: Object #<HTMLDocument> has no method 'getAttribute'
  • #12057: Sizzle Regression
  • #12082: .find() POS selector no longer working in 1.8b2
  • #12153: Error occurs in the selector

Support

  • #9385: Deprecate jQuery.browser
  • #11163: jQuery.support.checkClone always true
  • #11249: CSP error in Chrome 18 when loading jQuery 1.7.1
  • #11439: jQuery.support.parentNode used, but not defined any more.
  • #11721: deprecate and remove internal uses of jQuery.support.boxModel
  • #11757: IE 8 memory accumulation in iframes with jQuery 1.7.2
  • #11766: Move jQuery.support to "unstable" status

Traversing

  • #9800: New method: .addBack (supersedes .andSelf)
  • #11539: All version of jQuery don't support .has() on $([text Element].parentNode).has?(other_element)
  • #11543: .has doesn't work on detached elements
  • #11706: `.has()` fails on document fragments
  • #11738: Remove .closest(Array) returning Array

jQuery 1.8 RC1 Released

Posted on by

jQuery 1.8RC1 is here. Yep, RC as in Release Candidate. The good news is that this release is a few days later than I expected it to be. It’s good news because we received several valuable but last-minute bug reports we were able to fix. Many thanks to those of you who took the time to try out Beta 2 with your code, and especially to those who found and reported bugs.

Now I know there are a lot of you out there thinking, “Gee whiz, nobody ever lets me find bugs.” Well, here’s your chance to be a hero to the jQuery community. In this Release Candidate we may have taken some working features and inserted problems so obscure that even we don’t know where they are. Please find them! Just grab the code from here:

http://code.jquery.com/jquery-1.8rc1.js

Try out this Release Candidate code wherever you use jQuery, and let us know about any issues you find via the bug tracker. Be sure to mention you’re testing against jQuery 1.8 RC1, and please create a test case that shows the bug using jsFiddle.net so we can reproduce it and investigate. You can use the “jQuery (edge)” choice for framework in jsFiddle, which represents the most up-to-date code.

Oh, and did I mention this is a Release Candidate? Yeah, I did. Who knows if there will ever be a jQuery 1.8.1? If you find a bug after we release jQuery 1.8, it could be six months before it’s fixed. Six months of misery, all because you didn’t test the Release Candidate! One and a half women could make a baby while you’re waiting for that critical bug fix! For your own sake, please try it out!

jQuery 1.8rc1 Change Log

The current change log of the 1.8rc1 release.

Ajax

  • #8205: JSONP random result is causing memory leak in IE8
  • #8653: jQuery.param outputs "null" and "undefined" in the query string
  • #9399: Deprecate jqXHR.success and jqXHR.error
  • #10285: evalScript rcleanScript replacement fails in IE8
  • #10524: jQuery.fn.load does not merge data parameter with jQuery.ajaxSetup
  • #10944: $.ajax does not always return an object implementing the Promise interface
  • #11013: Deprecate use of Deferred/Promise with sync $.ajax
  • #11402: evalScript function fails with error error 80020101 in IE
  • #11743: jQuery silently ignores errors during script tag ajax request in $.appendTo()
  • #11778: Cached XHR requests should still resolve asynchronously
  • #12122: jQuery.ajax() async deprecate use with $.Deferred

Attributes

  • #11153: jQuery 1.7 Strips Carriage Returns in IE 8
  • #11212: Sizzle.getText converts unbreakable space into whitespace on IE
  • #11547: XML DOM .removeAttr() doesn't remove cased attributes
  • #11962: Standardize getter return values for empty sets.
  • #12127: Clone does not correctly copy checked state in IE10

Build

  • #11767: Support custom build without effects
  • #11789: Update README to describe grunt build system
  • #11856: modularize dimensions
  • #11857: modularize css
  • #11865: modularize offset
  • #11965: Create deprecated.js to contain as much of the deprecated stuff as possible

Core

  • #10657: Deprecate jQuery#size() in favor of jQuery#length
  • #11290: selector interpreted as HTML
  • #11470: Adding a builtin readyP promise
  • #12018: $(document).ready() fires too early in IE8
  • #12026: Let $(html, props) use any jQuery.fn method

Css

  • #10373: `document.defaultView` => `window`
  • #10413: width, innerWidth, innerHeight, outerWidth, outerHeight are inaccurate for a "box-sizing: border-box" child of hidden parent
  • #10679: CSS3 vendor prefix support
  • #11004: getWH incorrectly removes padding and border width when box-sizing is border-box
  • #11787: Remove jQuery.curCSS
  • #12088: Webkit now returning percentages for more getComputedStyle properties
  • #12148: hide event don't fire when toggle

Data

  • #7579: jQuery.data() truncates numbers taken from data-xxx attributes
  • #10589: Remove $.fn.data("events")

Deferred

  • #11010: Make Deferred.then == Deferred.pipe like Promise/A
  • #11011: Allow traditional options object for $.Callbacks flags
  • #11736: Remove Deferred .isResolved() and .isRejected()
  • #11749: Preserve context objects when multiple Deferred object are passed to $.when()

Dimensions

  • #6724: wrong $(window).height() in mobile safari (iphone)
  • #10877: Make outerWidth/Height a setter
  • #11293: Reading width or outerWidth of empty TDs alters columns width values
  • #11604: Switch $(elem).width(-val) from no-op to $(elem).width(0)
  • #11724: $(document).height() changed in Firefox 12

Effects

  • #7109: animate width starts with invalid width on webkit
  • #7157: Animation callback shows element is still ":animated"
  • #8387: flickering problem with jQuery 1.5 hide/show issue with inline and inline-block elements on webkit browsers
  • #8627: .animate() fails on letterSpacing in IE (regression in 1.5.1)
  • #8892: Callback is raised before objects are shown with fadeIn() and jQuery.fx.off = true
  • #9217: javascript error in IE8 when animating element is removed before animation finishes
  • #9505: animate() issue when mixing percentages and pixels in WebKit
  • #11635: Explicit overflow:auto is overridden by inline overflow:hidden during animation
  • #11755: animate and it aliases should not use :hidden selector
  • #11797: New animation related events
  • #11854: percentage animations jump to end
  • #11971: Animating background-position fails in IE8
  • #11999: Incremental animation on fixed div does subtraction instead of addition in Chrome.
  • #12117: overflow hidden not properly set when animating to 0 height or width
  • #12150: border-spacing property accumulates when rows are shown and hidden

Event

  • #8545: Leak with events in IE
  • #10067: Firing $.ready on document.readyState === 'interactive' too
  • #10895: The doScrollCheck ie hack in bindReady degrades ie7 performance for no reason whatsoever
  • #11101: Deprecate "exclusive" events option from trigger method
  • #11315: Problems with delegate() and :first in nested elements with equivalent classes
  • #11328: Ctrl key doesn't set event.metaKey to true on Windows
  • #11382: Mouseenter doesn't fire on a disabled input element
  • #11500: Bug : "change" event handler not executed when triggered manually on IE7 & IE8
  • #11621: Triggering a event on document doesn't bubble to window
  • #11718: Deprecate .data() events
  • #11719: Deprecate .bind("ready") event
  • #11731: Deprecate "hover" pseudo-event
  • #11733: Deprecate .load(), .unload(), and .error() methods
  • #11764: Allow delegated non-native events on disabled elements
  • #11786: Deprecate .toggle( handler, handler, … ) signature

Manipulation

  • #8894: appendTo() and alike methods called after clone() returns incorrect jQuery set in IE
  • #10324: Clone does not copy innerHTML of object element in IE9
  • #11231: Append, Prepend, After, Before should accept an array as first argument
  • #11338: Inconsistent behavior with .replaceWith() and disconnected nodes.
  • #11528: ie8 serialization bug with .html() also hitting html5 tags
  • #11566: node.append et al. does not work when node is a DocumentFragment
  • #11617: Define a $.parseHTML method for creating HTML fragments
  • #11809: Memory leak in .text(val) setter?
  • #11898: prevAll() with a complicated :not() selector returns results in wrong order
  • #12132: IE10 bug when cloning an object element without a parentNode

Offset

  • #10996: Simplify offset()
  • #11823: Remove webkitConvertPointFromNodeToPage

Selector

  • #3778: selector matching issues
  • #5568: Selectors behave differently with comments tags on FF/IE
  • #7596: xpath selector attribute name with brackets [] fails
  • #8473: In IE9rc *[tabIndex] select all elements without tabindex also
  • #8906: .(prevAll('span:has(input,select,textarea)')
  • #9400: Deprecate :text, :radio, :checkbox, etc. selector extensions
  • #9810: Rewrite Positional Selector Logic
  • #10003: Regression/BC break from #6963
  • #10074: Chaining two [] selector with :first not working
  • #10499: :nth-child() inside :has() treated as if outside it
  • #10570: :text selector throws an error in IE7 when there is a cross domain iframe on the page
  • #10697: Sizzle revamp
  • #10799: Inconsistent results with [name="name"] selectors (also breaks .has)