jQuery 4.0.0

On January 14, 2006, John Resig introduced a JavaScript library called jQuery at BarCamp in New York City. Now, 20 years later, the jQuery team is happy to announce the final release of jQuery 4.0.0. After a long development cycle and several pre-releases, jQuery 4.0.0 brings many improvements and modernizations. It is the first major version release in almost 10 years and includes some breaking changes, so be sure to read through the details below before upgrading. Still, we expect that most users will be able to upgrade with minimal changes to their code.

Many of the breaking changes are ones the team has wanted to make for years, but couldn’t in a patch or minor release. We’ve trimmed legacy code, removed some previously-deprecated APIs, removed some internal-only parameters to public functions that were never documented, and dropped support for some “magic” behaviors that were overly complicated.

We have an upgrade guide and jQuery Migrate plugin release ready to assist with the transition. Please upgrade and let us know if you encounter any issues.

As usual, the release is available on our CDN and the npm package manager. Other third party CDNs will probably have it available soon as well, but remember that we don’t control their release schedules and they will need some time. Here are the highlights for jQuery 4.0.0.

IE<11 support removed

jQuery 4.0 drops support for IE 10 and older. Some may be asking why we didn’t remove support for IE 11. We plan to remove support in stages, and the next step will be released in jQuery 5.0. For now, we’ll start by removing code specifically supporting IE versions older than 11.

We also dropped support for other very old browsers, including Edge Legacy, iOS versions earlier than the last 3, Firefox versions earlier than the last 2 (aside from Firefox ESR), and Android Browser. No changes should be required on your end. If you need to support any of these browsers, stick with jQuery 3.x.

Trusted Types and CSP

jQuery 4.0 adds support for Trusted Types, ensuring that HTML wrapped in TrustedHTML can be used as input to jQuery manipulation methods in a way that doesn’t violate the require-trusted-types-for Content Security Policy directive.

Along with this, while some AJAX requests were already using <script> tags to maintain attributes such as crossdomain, we have since switched most asynchronous script requests to use <script> tags to avoid any CSP errors caused by using inline scripts. There are still a few cases where XHR is used for asynchronous script requests, such as when the"headers" option is passed (use scriptAttrs instead!), but we now use a <script> tag whenever possible.

jQuery source migrated to ES modules

It was a special day when the jQuery source on the main branch was migrated from AMD to ES modules. The jQuery source has always been published with jQuery releases on npm and GitHub, but could not be imported directly as modules without RequireJS, which was jQuery’s build tool of choice. We have since switched to Rollup for packaging jQuery and we do run all tests on the ES modules separately. This makes jQuery compatible with modern build tools, development workflows, and browsers through the use of <script type=module>.

Deprecated APIs removed

These functions have been deprecated for several versions. It’s time to remove them now that we’ve reached a major release. These functions were either always meant to be internal or ones that now have native equivalents in all supported browsers. The removed functions include:

jQuery.isArray, jQuery.parseJSON, jQuery.trim, jQuery.type, jQuery.now, jQuery.isNumeric, jQuery.isFunction, jQuery.isWindow, jQuery.camelCase, jQuery.nodeName, jQuery.cssNumber, jQuery.cssProps, and jQuery.fx.interval.

Use native equivalents like Array.isArray(), JSON.parse(), String.prototype.trim(), and Date.now() instead.

The removal of deprecated APIs combined with the removal of code supporting old IE the result is a size reduction over 3k bytes gzipped.

Internal-only methods removed from jQuery prototype

The jQuery prototype has long had Array methods that did not behave like any other jQuery methods and were always meant for internal-use only. These methods are push, sort, and splice. They have now been removed from the jQuery prototype. If you were using these methods, $elems.push( elem ) can be replaced with [].push.call( $elems, elem ).

Focus event order now follows W3C spec

For a long time, browsers did not agree on the order of focus and blur events, which includes focusin, focusout, focus, and blur. Finally, the latest versions of all browsers that jQuery 4.0 supports have converged on a common event order. Unfortunately, it differs from the consistent order that jQuery had chosen years ago, which makes this a breaking change. At least everyone is on the same page now!

Starting with jQuery 4.0, we no longer override native behavior. This means that all browsers except IE will follow the current W3C specification, which is:

  1. blur
  2. focusout
  3. focus
  4. focusin

jQuery’s order in previous versions was: focusout, blur, focusin, focus. Ironically, the only browser to ever follow the old W3C spec (before it was updated in 2023) was Internet Explorer.

Updated slim build

The slim build has gotten even smaller in jQuery 4.0.0 with the removal of Deferreds and Callbacks (now around 19.5k bytes gzipped!). Deferreds have long-supported the Promises A+ standard, so native Promises can be used instead in most cases and they are available in all of jQuery’s supported browsers except IE11. Deferreds do have some extra features that native Promises do not support, but most usage can be migrated to Promise methods. If you need to support IE11, it’s best to use the main build or add a polyfill for native Promises.

Download

You can get the files from the jQuery CDN, or link to them directly:

https://code.jquery.com/jquery-4.0.0.js

https://code.jquery.com/jquery-4.0.0.min.js

You can also get this release from npm:

npm install [email protected]

Slim build

Sometimes you don’t need ajax, or you prefer to use one of the many standalone libraries that focus on ajax requests. And often it is simpler to use a combination of CSS and class manipulation for web animations. Finally, all of jQuery’s supported browsers (except for IE11) now have support for native Promises across the board, so Deferreds and Callbacks are no longer needed in most cases. Along with the regular version of jQuery that includes everything, we’ve released a “slim” version that excludes these modules. The size of jQuery is very rarely a load performance concern these days, but the slim build is about 8k gzipped bytes smaller than the regular version. These files are also available in the npm package and on the CDN:

https://code.jquery.com/jquery-4.0.0.slim.js

https://code.jquery.com/jquery-4.0.0.slim.min.js

These updates are already available as the current versions on npm and Bower. Information on all the ways to get jQuery is available at https://jquery.com/download/. Public CDNs receive their copies today, please give them a few days to post the files. If you’re anxious to get a quick start, use the files on our CDN until they have a chance to update.

Thanks

Thank you to all of you who participated in this release by submitting patches, reporting bugs, or testing, including Alex, Ahmed S. El-Afifi, fecore1, Dallas Fraser, Richard Gibson, Michał Gołębiowski-Owczarek, Pierre Grimaud, Gabriela Gutierrez, Jonathan, Necmettin Karakaya, Anders Kaseorg, Wonseop Kim, Simon Legner, Shashanka Nataraj, Pat O’Callaghan, Christian Oliff, Dimitri Papadopoulos Orfanos, Wonhyoung Park, Bruno PIERRE, Baoshuo Ren, Beatriz Rezener, Sean Robinson, Ed Sanders, Timo Tijhof, Tom, Christian Wenz, ygj6 and the whole jQuery team.

Happy 20th Birthday jQuery!

Lots of wonderful people have contributed to jQuery and its associated projects in the past 20 years and many of us met up for a reunion in Dallas. John Resig even joined over Zoom. This release was posted while we were all together.

Changelog

Full changelog: 4.0.0

Ajax

  • Don't treat array data as binary (992a1911)
  • Allow processData: true even for binary data (ce264e07)
  • Support binary data (including FormData) (a7ed9a7b)
  • Support headers for script transport even when cross-domain (#5142, 6d136443)
  • Support null as success functions in jQuery.get (#4989, 74978b7e)
  • Don't auto-execute scripts unless dataType provided (#4822, 025da4dd)
  • Make responseJSON work for erroneous same-domain JSONP requests (68b4ec59)
  • Execute JSONP error script responses (#4771, a1e619b0)
  • Avoid CSP errors in the script transport for async requests (#3969, 07a8e4a1)
  • Drop the json to jsonp auto-promotion logic (#1799, #3376, e7b3bc48)
  • Overwrite s.contentType with content-type header value, if any (#4119, 7fb90a6b)
  • Deprecate AJAX event aliases, inline event/alias into deprecated (23d53928)
  • Do not execute scripts for unsuccessful HTTP responses (#4250, 50871a5a)
  • Simplify jQuery.ajaxSettings.xhr (#1967, abdc89ac)

Attributes

  • Make .attr( name, false ) remove for all non-ARIA attrs (#5388, 063831b6)
  • Shave off a couple of bytes (b40a4807)
  • Don't stringify attributes in the setter (#4948, 4250b628)
  • Drop the toggleClass(boolean|undefined) signature (#3388, a4421101)
  • Refactor val(): don't strip carriage return, isolate IE workarounds (ff281991)
  • Don't set the type attr hook at all outside of IE (9e66fe9a)

CSS

  • Fix dimensions of table <col> elements (#5628, eca2a564)
  • Drop the cache in finalPropName (640d5825)
  • Tests: Fix tests & support tests under CSS Zoom (#5489, 071f6dba)
  • Fix reliableTrDimensions support test for initially hidden iframes (b1e66a5f)
  • Selector: Align with 3.x, remove the outer selector.js wrapper (53cf7244)
  • Make the reliableTrDimensions support test work with Bootstrap CSS (#5270, 65b85031)
  • Make offsetHeight( true ), etc. include negative margins (#3982, bce13b72)
  • Return undefined for whitespace-only CSS variable values (#5120) (7eb00196)
  • Don’t trim whitespace of undefined custom property (#5105, ed306c02)
  • Skip falsy values in addClass( array ), compress code (#4998, a338b407)
  • Justify use of rtrim on CSS property values (655c0ed5)
  • Trim whitespace surrounding CSS Custom Properties values (#4926, efadfe99)
  • Include show, hide & toggle methods in the jQuery slim build (297d18dd)
  • Remove the opacity CSS hook (865469f5)
  • Workaround buggy getComputedStyle on table rows in IE/Edge (#4490, 26415e08)
  • Don't automatically add "px" to properties with a few exceptions (#2795, 00a9c2e5)

Core

  • Remove obsolete workarounds, update support comments (e2fe97b7)
  • Switch $.parseHTML from document.implementation to DOMParser (0e123509)
  • Fix the exports setup to make bundlers work with ESM & CommonJS (#5416, 60f11b58)
  • Add more info about named exports (5f869590)
  • Simplify code post browser support reduction (93ca49e6)
  • Move the factory to separate exports (46f6e3da)
  • Use named exports in src/ (#5262, f75daab0)
  • Fix regression in jQuery.text() on HTMLDocument objects (#5264, a75d6b52)
  • Selector: Move jQuery.contains from the selector to the core module (024d8719)
  • Drop the root parameter of jQuery.fn.init (d2436df3)
  • Don't rely on splice being present on input (9c6f64c7)
  • Manipulation: Add basic TrustedHTML support (#4409, de5398a6)
  • Report browser errors in parseXML (#4784, 89697325)
  • Make jQuery.isXMLDoc accept falsy input (#4782, fd421097)
  • Drop support for Edge Legacy (i.e. non-Chromium Microsoft Edge) (#4568, e35fb62d)
  • Fire iframe script in its context, add doc param in globalEval (#4518, 4592595b)
  • Exclude callbacks & deferred modules in the slim build as well (fbc44f52)
  • Migrate from AMD to ES modules 🎉 (d0ce00cd)
  • Use Array.prototype.flat where supported (#4320, 9df4f1de)
  • Remove private copies of push, sort & splice from the jQuery prototype (b59107f5)
  • Implement .even() & .odd() to replace POS :even & :odd (78420d42)
  • Deprecate jQuery.trim (#4363, 5ea59460)
  • Remove IE-specific support tests, rely on document.documentMode (#4386, 3527a384)
  • Drop support for IE <11, iOS <11, Firefox <65, Android Browser & PhantomJS (#3950, #4299, cf84696f)
  • Remove deprecated jQuery APIs (#4056, 58f0c00b)

Data

  • Refactor to reduce size (805cdb43)
  • Event:Manipulation: Prevent collisions with Object.prototype (#3256, 9d76c0b1)
  • Separate data & css/effects camelCase implementations (#3355, 8fae2120)

Deferred

Deprecated

  • Define .hover() using non-deprecated methods (fd6ffc5e)
  • Remove jQuery.trim (0b676ae1)
  • Fix AMD parameter order (f810080e)

Dimensions

  • Add offset prop fallback to FF for unreliable TR dimensions (#4529, 3bbbc111)

Docs

  • Fix some minor issues in comments (e4d4dd81)
  • update herodevs link in README (#5695, 093e63f9)
  • Align CONTRIBUTING.md with 3.x-stable (d9281061)
  • Update CONTRIBUTING.md (4ef25b0d)
  • add version support section to README (cbc2bc1f)
  • Update remaining HTTP URLs to HTTPS (7cdd8374)
  • Fix module links in the package README (ace646f6)
  • update watch task in CONTRIBUTING.md (77d6ad71)
  • Fix typos found by codespell (620870a1)
  • remove stale gitter badge from readme (67cb1af7)
  • Remove the "Grunt build" section from the PR template (988a5684)
  • Remove stale badge from README (bcd9c2bc)
  • Update the README of the published package (edccabf1)
  • Remove git.io from a GitHub Actions comment (016872ff)
  • Update webpack website in README (01819bc3)
  • add link to patchwelcome and help wanted issues (924b7ce8)
  • add link to preview the new CLAs (683ceb8f)
  • Fix incorrect trac-NUMBER references (eb9ceb2f)
  • remove expired links from old jquery source (#4997) (ed066ac7)
  • Remove links to Web Archive from source (#4981, e24f2dcf)
  • Replace #NUMBER Trac issue references with trac-NUMBER (5d5ea015)
  • Update the URL to the latest jQuery build in CONTRIBUTING.md (9bdb16cd)
  • Remove the CLA checkbox in the pull request template (e1248931)
  • update irc to Libera and fix LAMP dead link (175db73e)
  • Update Frequently Reported Issues in the GitHub issue template (7a6fae6a)
  • Change JS Foundation mentions to OpenJS Foundation (11611967)
  • add SECURITY.md, show security email address (2ffe54ca)
  • Fix typos (1a7332ce)
  • Update the link to the jsdom repository (a62309e0)
  • Use https for hyperlinks in README (73415da2)
  • Remove a mention of the event/alias.js module from README (3edfa1bc)
  • Update links to EdgeHTML issues to go through Web Archive (1dad1185)
  • direct users to GitHub docs for cloning the repo (f1c16de2)
  • Change OS X to macOS in README (5a3e0664)
  • Update most URLs to HTTPS (f09d9210)
  • Convert link to Homebrew from HTTP to HTTPS (e0022f23)

Effect

  • Fix a unnecessary conditional statement in .stop() (#4374, 110802c7)

Effects

Event

  • Use .preventDefault() in beforeunload (7c123dec)
  • Increase robustness of an inner native event in leverageNative (#5459, 527fb3dc)
  • Avoid collisions between jQuery.event.special & Object.prototype (bcaeb000)
  • Simplify the check for saved data in leverageNative (dfe212d5)
  • Make trigger(focus/blur/click) work with native handlers (#5015, 6ad3651d)
  • Simulate focus/blur in IE via focusin/focusout (#4856, #4859, #4950, ce60d318)
  • Don't break focus triggering after .on(focus).off(focus) (#4867, e539bac7)
  • Make focus re-triggering not focus the original element back (#4382, dbcffb39)
  • Don't crash if an element is removed on blur (#4417, 5c2d0870)
  • Remove the event.which shim (#3235, 1a5fff4c)
  • remove jQuery.event.global (18db8717)
  • Only attach events to objects that accept data – for real (#4397, d5c505e3)
  • Stop shimming focusin & focusout events (#4300, 8a741376)
  • Prevent leverageNative from registering duplicate dummy handlers (eb6c0a7c)
  • Fix handling of multiple async focus events (#4350, ddfa8376)

Manipulation

  • Make jQuery.cleanData not skip elements during cleanup (#5214, 3cad5c43)
  • Generalize a test to support IE (88690ebf)
  • Support $el.html(selfRemovingScript) (#5378) (#5377, 937923d9)
  • Extract domManip to a separate file (ee6e8740)
  • Don't remove HTML comments from scripts (#4904, 2f8f39e4)
  • Respect script crossorigin attribute in DOM manipulation (#4542, 15ae3614)
  • Avoid concatenating strings in buildFragment (9c98e4e8)
  • Make jQuery.htmlPrefilter an identity function (90fed4b4)
  • Selector: Use the nodeName util where possible to save size (4504fc3d)

Offset

  • Increase search depth when finding the 'real' offset parent (556eaf4a)

Release

  • 4.0.0 (4f2fae08)
  • remove dist files from main branch (c838cfb5)
  • 4.0.0-rc.2 (97525193)
  • Update AUTHORS.txt (c128d5d8)
  • Fix release issues uncovered during the 4.0.0-rc.1 release (a5b0c431)
  • remove dist files from main branch (9d06c6dd)
  • 4.0.0-rc.1 (586182f3)
  • Run npm publish in the post-release phase (ff1f0eaa)
  • Only run browserless tests during the release (fb5ab0f5)
  • Temporarily disable running tests on release (3f79644b)
  • publish tmp/release/dist folder when releasing (#5658, a865212d)
  • correct build date in verification; other improvements (53ad94f3)
  • remove dist files from main branch (be048a02)
  • 4.0.0-beta.2 (51fffe9f)
  • ensure builds have the proper version (3e612aee)
  • set preReleaseBase in config file (1fa8df5d)
  • fix running pre/post release scripts in windows (5518b2da)
  • update AUTHORS.txt (862e7a18)
  • migrate release process to release-it (jquery/jquery-release#114, 2646a8b0)
  • add factory files to release distribution (#5411, 1a324b07)
  • use buildDefaultFiles directly and pass version (b507c864)
  • copy dist-module folder as well (63767650)
  • only published versioned files to cdn (3a0ca684)
  • remove scripts and dev deps from dist package.json (7eac932d)
  • update build command in Release.generateArtifacts (3b963a21)
  • add support for md5 sums in windows (f088c366)
  • remove the need to install grunt globally (b2bbaa36)
  • upgrade release dependencies (967af732)
  • Remove an unused chalk dependency (bfb6897c)
  • Use an in-repository dist README fixture (358b769a)
  • Update AUTHORS.txt (1b74660f)
  • update AUTHORS.txt (cf9fe0f6)

Selector

  • Remove the workaround for :has; test both on iPhone & iPad (65e35450)
  • Properly deprecate jQuery.expr[ ":" ]/jQuery.expr.filters (329661fd)
  • Make selector.js module depend on attributes/attr.js (#5379, e06ff088)
  • Eliminate selector.js depenencies from various modules (e8b7db4b)
  • Re-expose jQuery.find.{tokenize,select,compile,setDocument} (#5259, 338de359)
  • Stop relying on CSS.supports( "selector(…)" ) (#5194, 68aa2ef7)
  • Backport jQuery selection context logic to selector-native (#5185, 2e644e84)
  • Make selector lists work with qSA again (#5177, 09d988b7)
  • Implement the uniqueSort chainable method (#5166, 5266f23c)
  • Re-introduce selector-native.js (4c1171f2)
  • Manipulation: Fix DOM manip within template contents (#5147, 3299236c)
  • Drop support for legacy pseudos, test custom pseudos (8c7da22c)
  • Use jQuery :has if CSS.supports(selector(...)) non-compliant (#5098, d153c375)
  • Remove the "a:enabled" workaround for Chrome <=77 (c1ee33ad)
  • Make empty attribute selectors work in IE again (#4435, 05184cc4)
  • Use shallow document comparisons in uniqueSort (#4441, 15750b0a)
  • Add a test for throwing on post-comma invalid selectors (6eee5f7f)
  • Make selectors with leading combinators use qSA again (ed66d5a2)
  • Use shallow document comparisons to avoid IE/Edge crashes (#4441, aa6344ba)
  • reduce size, simplify setDocument (29a9544a)
  • Leverage the :scope pseudo-class where possible (#4453, df6a7f7f)
  • Bring back querySelectorAll shortcut usage (cef4b731)
  • Inline Sizzle into the selector module (47835965)
  • Port Sizzle tests to jQuery (79b74e04)

Support

  • ensure display is set to block for the support div (#4832, 09f25436)

Traversing

  • Fix contents() on <object>s with children in IE (ccbd6b93)
  • Fix contents() on <object>s with children (#4384, 4d865d96)

Source: jQuery

jQuery 4.0.0 Release Candidate 1

It’s here! Almost. jQuery 4.0.0-rc.1 is now available. It’s our way of saying, “we think this is ready; now poke it with many sticks”. If nothing is found that requires a second release candidate, jQuery 4.0.0 final will follow. Please try out this release and let us know if you encounter any issues.

A 4.0 upgrade guide and jQuery Migrate release are also now available, but both are subject to changes before the final jQuery Core release.

Many of the breaking changes in jQuery 4.0.0 are ones the team has wanted to make for years, but couldn’t in a patch or minor release. We’ve trimmed legacy code (including removing support for IE before version 11), removed some previously-deprecated APIs, removed some internal-only parameters to public functions that were never documented, and dropped support for some “magic” behaviors that were overly complicated.

As usual, the release is available on our CDN and the npm package manager. Third party CDNs will not be hosting this rc release, but will host the 4.0.0 final release later. Here are some highlights for jQuery 4.0.0 rc.1.

Download

You can get the files from the jQuery CDN, or link to them directly:

https://code.jquery.com/jquery-4.0.0-rc.1.js

https://code.jquery.com/jquery-4.0.0-rc.1.min.js

You can also get this release from npm:

npm install [email protected]

Slim build

Sometimes you don’t need ajax, or you prefer to use one of the many standalone libraries that focus on ajax requests. And often it is simpler to use a combination of CSS and class manipulation for web animations. Finally, all of jQuery’s supported browsers (except for IE11) now have support for native Promises across the board, so Deferreds and Callbacks are no longer needed in most cases. Along with the regular version of jQuery that includes everything, we’ve released a “slim” version that excludes these modules. The size of jQuery is very rarely a load performance concern these days, but the slim build is about 8k gzipped bytes smaller than the regular version. These files are also available in the npm package and on the CDN:

https://code.jquery.com/jquery-4.0.0-rc.1.slim.js

https://code.jquery.com/jquery-4.0.0-rc.1.slim.min.js

These updates are already available as the current versions on npm. Information on all the ways to get jQuery is available at https://jquery.com/download/. Public CDNs receive their copies today, please give them a few days to post the files. If you’re anxious to get a quick start, use the files on our CDN until they have a chance to update.

Thanks

Thank you to all of you who participated in this release by submitting patches, reporting bugs, or testing, including ac-mmi, Michał Gołębiowski-Owczarek, neogy-akash, and the whole jQuery team.

Changelog

Full changelog: 4.0.0-rc.1

CSS

Core

  • Remove obsolete workarounds, update support comments (e2fe97b7)
  • Switch $.parseHTML from document.implementation to DOMParser (0e123509)

Docs

  • Align CONTRIBUTING.md with 3.x-stable (d9281061)
  • Update CONTRIBUTING.md (4ef25b0d)
  • add version support section to README (cbc2bc1f)

Event

  • Use .preventDefault() in beforeunload (7c123dec)

Manipulation

  • Make jQuery.cleanData not skip elements during cleanup (#5214, 3cad5c43)

Selector

  • Properly deprecate jQuery.expr[ ":" ]/jQuery.expr.filters (329661fd)

Source: jQuery

jQuery UI 1.14.1 released

jQuery UI 1.14.1 has been released. It includes a fix for shrinking dialog contents on resizing with box-sizing set to content-box (issue #2277, PR #2281) and makes the tabs widget work correctly with IDs with backslashes (PR #2307). Dialog supports a new option: uiDialogTitleHeadingLevel. When set to a number between 1 & 6, it changes the current <span> wrapper of the dialog title into a heading element of a specified level (issue #2271, PR #2275). We've also enabled GitHub CodeQL checks and fixed a few reported issues.

Apart from that, there have been a number of fixes to demos available on jqueryui.com, mostly accounting for the back compat flag being off by default.

If you're still on jQuery UI 1.13.x, see the jQuery UI 1.14.0 release blog post to learn about the changes in the 1.14.x line.

Supported jQuery versions

This release has been tested against jQuery 1.12.4, 2.2.4, 3.6.4 & 3.7.1. Since jQuery follows semver, newer jQuery <4 versions within each major version line should generally work as well.

jQuery UI 1.14.1 triggers no jQuery Migrate warnings when running its test suite against jQuery 3.7.1 with jQuery Migrate 3.5.2, i.e. the latest versions at the time of this release.

Reminder about maintenance state

Please remember jQuery UI is in a maintenance state: we’ll make sure the library is compatible with new jQuery releases and that security issues are fixed but no new significant feature work is planned. We’ll also try to fix important regressions from jQuery UI 1.12.1; older long-standing bugs may not get fixed. Note that this does not affect jQuery Core which is still actively maintained.

Download

File Downloads

Git (contains source files, with @VERSION replaced with 1.14.1, base theme only)

Install via npm

Install via bower

  • bower install jquery/jquery-ui#1.14.1

jQuery CDN

Google Ajax Libraries API (CDN)

Custom Download Builder

Changelog

See the 1.14 Upgrade Guide for a list of changes that may affect you when upgrading from 1.13.x. For full details on what’s included in this release see the 1.14.1 Changelog.

Thanks

Thanks to all who helped with this release, specifically: Daniel García, Michał Gołębiowski-Owczarek, Ralf Koller, Timmy Willison & Felix Nagel.

Comments

Note: please report bugs to the jQuery UI Bug Tracker; support questions should be posted on Stack Overflow with the jquery-ui tag.

Source: jQuery UI

jQuery UI 1.14.0 released

We are happy to announce the 1.14.0 stable release! The focus of this release is reducing the maintenance burden to ensure important issues are addressed, as outlined in the blog post about plans for jQuery UI 1.14. As of today, the jQuery UI 1.13.x line is no longer supported.

Reduced support for older browsers or jQuery

jQuery UI 1.14 finally drops support for all versions of Internet Explorer & Edge Legacy. Only the latest version of Chrome, Firefox, Safari & Edge are officially supported. Contrary to what we did in past releases, code supporting unsupported browsers has been deleted.

Support for jQuery 1.7-1.11, 2.0-2.1 & 3.0-3.5 has been dropped.

This release has been tested against jQuery 1.12.4, 2.2.4, 3.6.4 & 3.7.1. Since jQuery follows semver, newer jQuery <4 versions within each major version line should generally work as well.

jQuery UI 1.14 triggers no jQuery Migrate warnings when running its test suite against jQuery 3.7.1 with jQuery Migrate 3.5.2, i.e. the latest versions at the time of this release.

Breaking changes

Backward compatibility with the 1.11 API is disabled by default. To enable it (restoring the default 1.13 behavior), set the jQuery.uiBackCompat flag to true. We encourage trying without the compatibility layer, though - maybe your app is already using new APIs exclusively? If there are any feature gaps from the old APIs, please submit issues.

A few APIs have been removed as they were no longer needed after dropping IE support: $.fn._form, $.ui.ie, $.ui.safeActiveElement & $.ui.safeBlur. See the 1.14 Upgrade Guide for information about replacements.

The Download Builder now only supports jQuery UI 1.12 & newer. This change happened independently from the jQuery UI 1.14 release, but it's worth reminding.

Feature: aria-modal support in the dialog widget

Modal dialogs now get the aria-modal="true" attribute added. Thanks to that, modal dialogs cause the elements outside of the dialog to be excluded from the accessibility tree, making some accessibility tools more useful. See issue #2246 for more information.

Test infrastructure changes

jQuery UI 1.14 is tested in all supported browsers & jQuery Core versions not only post-merge as was done in the past, but also on every pull request via GitHub Actions. That should make contributing to jQuery UI easier.

This improvement was made possible by a major rewrite of jQuery UI test infrastructure, which removed all deprecated or under-supported dependencies.

Reminder about maintenance state

Please remember jQuery UI is in a maintenance state: we’ll make sure the library is compatible with new jQuery releases and that security issues are fixed but no new significant feature work is planned. We’ll also try to fix important regressions from jQuery UI 1.12.1; older long-standing bugs may not get fixed. Note that this does not affect jQuery Core which is in active development.

Download

File Downloads

Git (contains source files, with @VERSION replaced with 1.14.0, base theme only)

Install via bower

  • bower install jquery/jquery-ui#1.14.0

jQuery CDN

Google Ajax Libraries API (CDN)

Custom Download Builder

Changelog

See the 1.14 Upgrade Guide for a list of changes that may affect you when upgrading from 1.13.x. For full details on what’s included in this release see the 1.14.0 Changelog.

Thanks

Thanks to all who helped with this release, specifically: Michał Gołębiowski-Owczarek, Porter Clevidence, Ralf Koller, Timmy Willison, and Felix Nagel.

Comments

Note: please report bugs to the jQuery UI Bug Tracker; support questions should be posted on Stack Overflow with the jquery-ui tag. Please don’t use comments to report bugs.

If you have feedback on us doing our release for jQuery UI 1.14.0, feel free to leave a comment below. Thank you.

Source: jQuery UI

Second Beta of jQuery 4.0.0

Last February, we released the first beta of jQuery 4.0.0. We’re now ready to release a second, and we expect a release candidate to come soon™. This release comes with a major rewrite to jQuery’s testing infrastructure, which removed all deprecated or under-supported dependencies. But the main change that warranted a second beta was a fix to the exports field for bundlers. More on that and other changes below.

Many of the breaking changes in jQuery 4.0.0 are ones the team has wanted to make for years, but couldn’t in a patch or minor release. We’ve trimmed legacy code (including removing support for IE before version 11), removed some previously-deprecated APIs, removed some internal-only parameters to public functions that were never documented, and dropped support for some “magic” behaviors that were overly complicated.

We will publish a comprehensive upgrade guide before final release, to outline the removed code and how to migrate. The jQuery Migrate plugin will also be ready to assist. For now, please try out this release and let us know if you encounter any issues.

As usual, the release is available on our CDN and the npm package manager. Third party CDNs will not be hosting this beta release, but will host the 4.0.0 final release later. Here are some highlights for jQuery 4.0.0 beta.2.

CommonJS + ESM: Strange Bedfellows

There are many different ways to include jQuery in a project. Supporting all of them can be difficult, especially when the environment supports both CommonJS and ESM modules. We wanted to support all of the ways jQuery might be included, whether using a named export or the default export. Also, we wanted to ensure jQuery was only ever included once, even when jQuery was both imported using ESM and required using CommonJS in the same environment or bundle. We think we’ve worked out a solution that supports Node.js and bundlers like rollup, webpack, and parcel. More details can be found in the PR. Also, we created a wiki page to explain how the exports property in jQuery’s package.json will work in 4.0.

Boolean Attributes: To Be Or …

The HTML spec defines boolean attributes that often correlate with boolean properties. If the attribute is missing, it correlates with the false property value, if it’s present – the true property value. The only valid values for boolean content attributes are empty string or the full attribute name (e.g. checked="checked").

jQuery has historically tried to be helpful here and treated boolean attributes in a special way in the .attr() API:

  1. For the getter, as long as the attribute was present, it was returning the
    attribute name lowercased, ignoring the value.
  2. For the setter, it was removing the attribute when false was passed;
    otherwise, it was ignoring the passed value and set the attribute –
    interestingly, in jQuery >=3 not lowercased anymore.

The problem is the spec occasionally converts boolean attributes into ones with additional attribute values with special behavior – one such example is the new "until-found" value for the hidden attribute. Our setter normalization meant passing those values was impossible with .attr() (.prop() was unaffected). Also, new boolean attributes were introduced occasionally and jQuery could not easily add them to the list without incurring breaking changes.

This patch removes any special handling of boolean attributes – the getter returns the value as-is and the setter sets the provided value, with one exception. To maintain backwards compatibility, this patch makes the false boolean value trigger attribute removal for ALL non-ARIA attributes. For example, .attr( "checked", false ) will continue to remove the checked attribute, which is the only way the corresponding property will be set to false. ARIA attributes are exempt from the rule since many of them recognize the string "false" as a valid value with semantics different than the attribute missing. To remove an ARIA attribute, use .removeAttr() or pass null as the value to .attr().

Position of Elements In Tables

jQuery 4.0.0-beta.2 also fixes some inconsistent behavior when finding the position of elements within tables. The offset parent on which the position was based could change depending on whether the element’s position style was static or relative.

<div id="container" style="position: relative;">
    <table>
        <tr>
            <td>
                <span id="static"></span>
                <span id="relative" style="position: relative;"></span>
            </td>
        </tr>
    </table>
</div>

Previously, $('#static').position() was returning the position relative to the containing <td> element, while $('#relative').position() was returning the position relative to #container.

Now, both elements return their position relative to #container.

Download

You can get the files from the jQuery CDN, or link to them directly:

https://code.jquery.com/jquery-4.0.0-beta.2.js

https://code.jquery.com/jquery-4.0.0-beta.2.min.js

You can also get this release from npm:

npm install [email protected]

Slim build

Sometimes you don’t need ajax, or you prefer to use one of the many standalone libraries that focus on ajax requests. And often it is simpler to use a combination of CSS and class manipulation for web animations. Finally, all of jQuery’s supported browsers (except for IE11) now have support for native Promises across the board, so Deferreds and Callbacks are no longer needed in most cases. Along with the regular version of jQuery that includes everything, we’ve released a “slim” version that excludes these modules. The size of jQuery is very rarely a load performance concern these days, but the slim build is about 8k gzipped bytes smaller than the regular version. These files are also available in the npm package and on the CDN:

https://code.jquery.com/jquery-4.0.0-beta.2.slim.js

https://code.jquery.com/jquery-4.0.0-beta.2.slim.min.js

These updates are already available as the current versions on npm. Information on all the ways to get jQuery is available at https://jquery.com/download/. Public CDNs receive their copies today, please give them a few days to post the files. If you’re anxious to get a quick start, use the files on our CDN until they have a chance to update.

Thanks

Thank you to all of you who participated in this release by submitting patches, reporting bugs, or testing, including Michał Gołębiowski-Owczarek, J.Son, Liam James and the whole jQuery team.

We’re on Mastodon!

jQuery has a Mastodon account! We now post releases and other updates to both X and Mastodon. Also, you may be interested in following some of our team members that have Mastodon accounts.

jQuery: https://social.lfx.dev/@jquery

mgol: https://hachyderm.io/@mgol

timmywil: https://hachyderm.io/@timmywil

Changelog

Full changelog: 4.0.0-beta.2

Attributes

  • Make .attr( name, false ) remove for all non-ARIA attrs (#5388, 063831b6)

Build

  • Bump the github-actions group with 2 updates (3a98ef91)
  • upgrade dependencies; fix bundler tests on windows (cb8ab6cc)
  • improve specificity of eslint config; add ecma versions (74970524)
  • Bump the github-actions group with 2 updates (46b9e480)
  • Group dependabot PRs updating GitHub Actions (3cac1465)
  • Bump actions/cache, actions/checkout & github/codeql-action (df1df950)
  • Bump express from 4.18.3 to 4.19.2 (691c0aee)
  • make compare size cache readable for manual edits (783c9d69)
  • fix size comparison for slim files when the branch is dirty (8a3a74c4)
  • migrate more uses of fs.promises; use node: protocol (ae7f6139)
  • Bump github/codeql-action from 3.24.0 to 3.24.6 (ae67ace6)
  • Bump actions/cache from 4.0.0 to 4.0.1 (68f772e0)
  • drop support for Node 10 (5aa7ed88)
  • add GitHub Actions workflow to update Filestash (0293d3e3)
  • update jenkins script to only build (c21c6f4d)
  • Bump actions/cache & github/codeql-action (#5402) (bf11739f)

CSS

  • Tests: Fix tests & support tests under CSS Zoom (#5489, 071f6dba)

Core

  • Fix the exports setup to make bundlers work with ESM & CommonJS (#5416, 60f11b58)

Docs

  • Update remaining HTTP URLs to HTTPS (7cdd8374)

Event

  • Increase robustness of an inner native event in leverageNative (#5459, 527fb3dc)

Offset

  • Increase search depth when finding the 'real' offset parent (556eaf4a)

Release

Tests

  • remove unnecessary scroll feature test (ea31e4d5)
  • Align :has selector tests with 3.x-stable (f2d9fde5)
  • revert concurrency group change (fa73e2f1)
  • include github ref in concurrency group (5880e027)
  • Make the beforeunload event tests work regardless of extensions (399a78ee)
  • share queue/browser handling for all worker types (284b082e)
  • improve diffing for values of different types (b9d333ac)
  • show any and all actual/expected values (f80e78ef)
  • add diffing to test reporter (44fb7fa2)
  • add actual and expected messages to test reporter (1e84908b)
  • fix worker restarts for failed browser acknowledgements (fedffe74)
  • add –hard-retries option to test runner (822362e6)
  • fix cleanup in cases where server doesn't stop (0754d596)
  • fix flakey message logs; ignore delete worker failures (02d23478)
  • reuse browser workers in BrowserStack tests (#5428) (95a4c94b)
  • Use allowlist instead of whitelist (2b97b6bb)
  • migrate testing infrastructure to minimal dependencies (dfc693ea)
  • Fix Karma tests on Node.js 20 (d478a1c0)

Source: jQuery

jQuery UI 1.14.0-beta.2 released

Following up on our blog post on Plans for jQuery UI 1.14, it is our pleasure to announce the second beta for jQuery UI 1.14.0.

Compared to the first beta, there are two main changes:

  • Support for aria-modal attribute in dialogs have been added (PR #2257).
  • The release is now fully supported in the jQuery UI Download Builder; zip files are also available.

We’ve also finalized the migration from the TestSwarm test runner to our custom one integrated into GitHub Actions.

See the jQuery UI 1.14.0-beta.1 blog post for information about changes already available in the first beta.

Please remember jQuery UI is in a maintenance state. We’ll make sure the library is compatible with new jQuery releases and that security issues are fixed but no new significant feature work is planned. We’ll also try to fix important regressions from jQuery UI 1.12.1; older long-standing bugs may not get fixed. Note that this does not affect jQuery Core, which is still actively maintained.

Download

File Downloads

Git (contains source files, with @VERSION replaced with 1.14.0-beta.2, base theme only)

Install via npm

Install via bower

  • bower install jquery/jquery-ui#1.14.0-beta.2

jQuery CDN

Changelog

For full details on what’s included in this release see the 1.14.0-beta.2 Changelog. The 1.14 Upgrade Guide will be available later.

Thanks

Thanks to all who helped with this release, specifically: Ralf Koller, Michał Gołębiowski-Owczarek, Timmy Willison.

Comments

Note: Please report bugs to the jQuery UI Bug Tracker. Support questions should be posted on Stack Overflow with the jquery-ui tag.

Source: jQuery UI

jQuery UI 1.14.0-beta.1 released

Following up on our blog post on Plans for jQuery UI 1.14, it is our pleasure to announce the first beta for jQuery UI 1.14.0.

This release doesn't offer any new features, only the following breaking changes:

  • Only the latest version of Chrome, Firefox, Safari & Edge are officially supported; there is no support for any version of IE and Edge Legacy. Contrary to what was done in past releases, code supporting unsupported browsers has been deleted.
  • Only the latest jQuery version within each major version of jQuery Core is supported. This beta was tested against jQuery 1.12.4, 2.2.4 & 3.7.1, plus two development versions: 3.x & 4.x.
  • Backwards compatibility with the 1.11 API is disabled by default. To re-enable it (restoring the default 1.13 behavior) set the jQuery.uiBackCompat flag to true.

This beta is not integrated into the jQuery UI Download Builder; support for jQuery UI 1.14 will be added before the final release. Because of that, zip bundles are not available for this beta.

We'd also like to remind you that beginning in June 2024, the Download Builder will only support jQuery UI 1.12 or newer. For more information, please read the Plans for jQuery UI 1.14 blog post.

Please remember jQuery UI is in a maintenance state. We’ll make sure the library is compatible with new jQuery releases and that security issues are fixed but no new significant feature work is planned. We’ll also try to fix important regressions from jQuery UI 1.12.1; older long-standing bugs may not get fixed. Note that this does not affect jQuery Core, which is still actively maintained.

Download

Git (contains source files, with @VERSION replaced with 1.14.0-beta.1, base theme only)

Install via npm

Install via bower

  • bower install jquery/jquery-ui#1.14.0-beta.1

jQuery CDN

Changelog

For full details on what’s included in this release see the 1.14.0-beta.1 Changelog. The 1.14 Upgrade Guide will be available later.

Thanks

Thanks to all who helped with this release, specifically: Michał Gołębiowski-Owczarek, Timmy Willison, Felix Nagel.

Comments

Note: Please report bugs to the jQuery UI Bug Tracker. Support questions should be posted on Stack Overflow with the jquery-ui tag.

Source: jQuery UI

Plans for jQuery UI 1.14, dropping support for UI <1.12 in the Download Builder

jQuery UI has been in maintenance mode since 2021. We are prioritizing security issues & regressions from jQuery UI 1.12, with occasional fixes contributed by the community. That said, maintaining jQuery UI still takes a significant effort. This is caused by many moving pieces:

  • jQuery UI 1.13 supports jQuery 1.8 & newer. This means jQuery UI is currently tested against every major and minor jQuery release since jQuery 1.8, in all supported browsers, and in development versions of jQuery. This amounts to 18 test variants in total.
  • jQuery UI is tested against the latest two versions of Chrome, Firefox, Safari, Opera & Edge, Edge Legacy & IE 11.
  • The Download Builder supports jQuery UI 1.9 & newer - that’s 5 versions, the older of which was first released in 2012. Each of those versions has custom builder code that needs maintenance.
  • Most of the testing is only done post-commit; PRs have had limited testing so far.

The above issues, combined with the fact very few people work on jQuery UI in their limited time, result in delays—1 year and 9 months have passed between the 1.13.2 and 1.13.3 releases. If we want to continue supporting jQuery UI, we need to reduce some of this complexity.

We are planning the following changes to ease the maintenance effort:

  • Beginning in June, 2024, the Download Builder will only support jQuery UI 1.12 or newer. If you rely on built-in themes, you’ll still be able to download full builds of previous releases from the releases page after this date.
  • jQuery UI 1.14 will only be tested on the latest version of Chrome, Firefox, Safari & Edge. It will not support IE and Edge Legacy. Contrary to what was done in past releases, code supporting unsupported browsers will be deleted.
  • Only the latest jQuery version within each major version of jQuery Core will be supported. As of the publication date of this blog post, that would be jQuery 1.12.4, 2.2.4 & 3.7.1, plus two development versions: 3.x & 4.x.
  • All browsers supported by jQuery UI 1.14 will be tested on PRs via the same custom test runner as jQuery Core. This will help catch issues before problematic code gets merged. In fact, this change has already landed!
  • jQuery UI 1.14 will have the jQuery.uiBackCompat flag set to false. We are not planning new big compatibility breaks and this will help people discover accidental reliance on deprecated behaviors.
  • Support for jQuery UI 1.13 will end on the day jQuery UI 1.14.0 is released.

We understand these changes may be disrupting for some teams. However, we need to balance limited resources with still being able to address more important issues. We think the above plan is the best way to achieve this goal.

Source: jQuery UI

jQuery UI 1.13.3 released

We're happy to announce the third patch release to jQuery UI 1.13 is out. It includes fixes for the resizable widget when a global box-sizing: border-box CSS declaration is present (a common complaint was about resizable dialogs), support for the hidden attribute in selectmenu options, fixes for the deprecated -ms-filter syntax, and correcting the format of the deprecated ui/core.js AMD module.

jQuery UI has a new test runner ported from jQuery that allows local & BrowserStack test runs without reliance on Karma. As an added bonus, we're now running tests against Chrome, Firefox, Safari & Edge against latest jQuery 1.x, 2.x, 3.x & the development version in GitHub CI, allowing to detect more issues at the pull request level. This will also be a basis for a future jQuery UI 1.14 - but that's a topic for a separate blog post.

Please remember jQuery UI is in a maintenance state: we’ll make sure the library is compatible with new jQuery releases and that security issues are fixed but no new significant feature work is planned. We’ll also try to fix important regressions from jQuery UI 1.12.1; older long-standing bugs may not get fixed. Note that this does not affect jQuery Core which is still actively maintained.

Download

File Downloads

Git (contains source files, with @VERSION replaced with 1.13.3, base theme only)

Install via npm

Install via bower

  • bower install jquery/jquery-ui#1.13.3

jQuery CDN

Google Ajax Libraries API (CDN)

Microsoft Ajax CDN (CDN)

Custom Download Builder

Changelog

See the 1.13 Upgrade Guide for a list of changes that may affect you when upgrading from 1.12.x. For full details on what’s included in this release see the 1.13.3 Changelog.

Thanks

Thanks to all who helped with this release, specifically: Ashish Kurmi, DeerBear, divdeploy, Kenneth DeBacker, mark van tilburg, Matías Cánepa, Michał Gołębiowski-Owczarek, Timmy Willison, Timo Tijhof, Дилян Палаузов, Felix Nagel.

Comments

Note: please report bugs to the jQuery UI Bug Tracker; support questions should be posted on Stack Overflow with the jquery-ui tag.

Source: jQuery UI

Upgrading jQuery: Working Towards a Healthy Web

jQuery’s influence on the web will always be evident. When it was first introduced in 2006, jQuery became a fundamental tool for web developers almost immediately. It simplified JavaScript programming, making it easier to manipulate HTML documents, handle events, perform animations, and much more. Since then, it has played and continues to play a major role in the evolution of web standards and browser capabilities.

With the rise of modern JavaScript frameworks, fewer developers may be choosing to use jQuery for new projects, but worldwide usage is still extremely high. After analyzing the results of a survey conducted by IDC, the OpenJS Foundation estimated that 90% of all websites use jQuery. And about a third of those use an outdated version.

The jQuery Team and OpenJS Foundation are working to fix that as part of the Healthy Web checkup campaign. This guide will explain why it is important to keep your jQuery version up to date and walk you through the process of upgrading jQuery.

Why Is Upgrading jQuery Important for Security?

Security Vulnerabilities: Like any software, jQuery may contain security vulnerabilities in its codebase. These vulnerabilities can range from Cross-Site Scripting (XSS) vulnerabilities to more severe issues like Remote Code Execution (RCE). As vulnerabilities are discovered, the jQuery team releases patches and updates to address them. By upgrading to the latest version of jQuery, you ensure that your application benefits from these security fixes, reducing the risk of exploitation by attackers.

Security Best Practices: Newer versions of jQuery often incorporate security best practices and enhancements to mitigate common security threats. These improvements may include stricter input validation, improved handling of user-generated content, and better protection against XSS attacks. By upgrading, you adopt these best practices and strengthen the security posture of your application.

Compliance Requirements: Many industries and regulatory frameworks require organizations to maintain up-to-date software and address known security vulnerabilities promptly. Failure to upgrade jQuery and address security issues could lead to non-compliance with these requirements.

What About Browser Support?

jQuery 1.x, 2.x, and 3.x each have a different list of supported browsers. However, given current browser market usage, the browsers that jQuery 3.x supports, which includes IE 9+, should be sufficient in almost all cases. jQuery 4.x will still support IE11, even though Microsoft announced it is officially out of support.

How Do I Upgrade jQuery?

The jQuery Team provides the jQuery Migrate plugin to make upgrading jQuery as easy as possible. It is mainly meant as a development tool that generates warning messages in the browser console that can be used to identify and fix compatibility issues. It temporarily restores deprecated features and behaviors so that older code will still run on newer versions of jQuery while the compatibility issues are addressed.

There are two versions of jQuery Migrate: 1.x and 3.x (there is no Migrate 2.x). Only one version should be used at a time, but you may need to use both in succession if upgrading from a jQuery version that predates jQuery 1.9.

For example, if your current jQuery version is 1.4.4, first use jQuery Migrate 1.x to upgrade to jQuery 1.12.4 and then use jQuery Migrate 3.x to upgrade to the latest jQuery (3.7.1, as of this writing). If your current version is 2.2.4, you only need to use jQuery Migrate 3.x to upgrade to the latest jQuery.

Using jQuery Migrate

First, add jQuery Migrate to your page *after* loading jQuery.

<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script src="https://code.jquery.com/jquery-migrate-3.4.1.js"></script>

Then, test your website or application. As different jQuery APIs are used, jQuery Migrate will log messages to the console warning about any deprecations or breaking changes. Address each warning one at a time.

Finally, when no more warnings are logged to the console and all breaking changes have been addressed, the jQuery Migrate can be removed and migration is complete!

See the jQuery Migrate README for more details.

jQuery Upgrade Guides

The jQuery Upgrade Guides can be helpful when you’re looking for more details on a breaking change, or you just want to see the full list of breaking changes for each version. There are upgrade guides for jQuery 1.9, 3.0 and 3.5 that list all of the breaking changes that happened in those releases. Most of the breaking changes listed will probably not apply to your code, but these guides add some context and explanation for each change.

A Note on Future jQuery Versions

With jQuery 4.0 on the horizon, you may wonder what the process will be for upgrading to jQuery 4.x. The answer is that it will be the same as upgrading to jQuery 3.x and it can still be done in one step. In other words, there will be no need to upgrade to jQuery 3.x before upgrading to jQuery 4.x. You will be able to upgrade straight from 1.9+ to jQuery 4.x. We will also have an upgrade guide ready for jQuery 4.0.

Conclusion

Upgrading jQuery is essential for maintaining the security, performance, and compatibility of your web applications. By following the steps outlined in this guide, you can safely upgrade to the latest version of jQuery and take advantage of its new features and improvements while ensuring that your web application remains protected against any discovered vulnerabilities. Remember to regularly check for updates and stay informed about new releases to keep your codebase up to date.

Source: jQuery