История и наследие jquery
Содержание:
- How to build your own jQuery
- Загрузка jQuery с использованием CDN
- Who Helped
- Essential Git
- jQuery и AJAX
- Current Active Support
- Как подключить скрипт jQuery в html
- Подключаем jQuery
- Manipulation
- Security Fix
- Подключаем jQuery с CDN
- jQuery Core — All 1.x Versions
- Начинаем писать код на jQuery
- link jQuery Migrate Plugin
- Changelog
How to build your own jQuery
First, clone the jQuery git repo.
Then, enter the jquery directory and run the build script:
cd jquery && npm run build
The built version of jQuery will be put in the subdirectory, along with the minified copy and associated map file.
If you want to create custom build or help with jQuery development, it would be better to install grunt command line interface as a global package:
Make sure you have installed by testing:
Now by running the command, in the jquery directory, you can build a full version of jQuery, just like with an command:
There are many other tasks available for jQuery Core:
Modules
Special builds can be created that exclude subsets of jQuery functionality.
This allows for smaller custom builds when the builder is certain that those parts of jQuery are not being used.
For example, an app that only used JSONP for and did not need to calculate offsets or positions of elements could exclude the offset and ajax/xhr modules.
Any module may be excluded except for , and . To exclude a module, pass its path relative to the folder (without the extension).
Some example modules that can be excluded are:
- ajax: All AJAX functionality: , , , , , transports, and ajax event shorthands such as .
- ajax/xhr: The XMLHTTPRequest AJAX transport only.
- ajax/script: The AJAX transport only; used to retrieve scripts.
- ajax/jsonp: The JSONP AJAX transport only; depends on the ajax/script transport.
- css: The method. Also removes all modules depending on css (including effects, dimensions, and offset).
- css/showHide: Non-animated , and ; can be excluded if you use classes or explicit calls to set the property. Also removes the effects module.
- deprecated: Methods documented as deprecated but not yet removed.
- dimensions: The and methods, including and variations.
- effects: The method and its shorthands such as or .
- event: The and methods and all event functionality.
- event/trigger: The and methods.
- offset: The , , , , and methods.
- wrap: The , , , and methods.
- core/ready: Exclude the ready module if you place your scripts at the end of the body. Any ready callbacks bound with will simply be called immediately. However, will not be a function and or similar will not be triggered.
- deferred: Exclude jQuery.Deferred. This also removes jQuery.Callbacks. Note that modules that depend on jQuery.Deferred(AJAX, effects, core/ready) will not be removed and will still expect jQuery.Deferred to be there. Include your own jQuery.Deferred implementation or exclude those modules as well ().
- exports/global: Exclude the attachment of global jQuery variables ($ and jQuery) to the window.
- exports/amd: Exclude the AMD definition.
The build process shows a message for each dependent module it excludes or includes.
AMD name
As an option, you can set the module name for jQuery’s AMD definition. By default, it is set to «jquery», which plays nicely with plugins and third-party libraries, but there may be cases where you’d like to change this. Simply set the option:
grunt custom --amd="custom-name"
Or, to define anonymously, set the name to an empty string.
grunt custom --amd=""
Custom Build Examples
To create a custom build, first check out the version:
git pull; git checkout VERSION
Where VERSION is the version you want to customize. Then, make sure all Node dependencies are installed:
npm install
Create the custom build using the option, listing the modules to be excluded.
Exclude all ajax functionality:
grunt custom:-ajax
Excluding css removes modules depending on CSS: effects, offset, dimensions.
grunt custom:-css
Exclude a bunch of modules:
grunt custom:-ajax/jsonp,-css,-deprecated,-dimensions,-effects,-offset,-wrap
There is also a special alias to generate a build with the same configuration as the official jQuery Slim build is generated:
grunt custom:slim
Загрузка jQuery с использованием CDN
Вместо того чтобы хранить библиотеку jQuery на своем сервере, можете воспользоваться одной из публично доступных сетей дистрибуции контента (Content Distribution Network — CDN), в которых хранится jQuery. CDN — это географически распределенная серверная сеть, обеспечивающая доставку файлов конечному пользователю с ближайшего сервера.
Существуют две причины, по которым имеет смысл использовать CDN:
-
Во-первых, это ускоряет доставку файла библиотеки jQuery конечному пользователю, поскольку файл загружается с сервера, который расположен ближе всего по отношению к нему, а не с ваших серверов. Во многих случаях сам файл может вообще не потребоваться. Библиотека jQuery настолько популярна, что существует большая вероятность того, что браузер пользователя ранее уже кэшировал ее файл из другого приложения, которое также использует jQuery.
-
Во-вторых, при таком способе доставки библиотеки jQuery пользователю затраты на это вашего ценнейшего ресурса — полосы пропускания — полностью исключаются. Для сайтов с интенсивным трафиком это может дать значительную экономию средств.
Используя CDN, вы должны быть твердо уверены в надежности ее оператора. Вы должны быть уверены в том, что пользователь получит именно те файлы, на которые рассчитывает, и что служба будет оставаться всегда доступной. Google и Microsoft также предоставляют бесплатные услуги CDN по доставке библиотеки jQuery (равно как и других популярных библиотек JavaScript). Обе компании имеют богатейший опыт бесперебойного предоставления услуг, и от них вряд ли можно ожидать самовольного внесения каких-либо изменений в библиотеку jQuery.
Подробнее о службе Microsoft можно узнать по такому адресу: asp.net/ajaxlibrary/cdn.ashx. Ниже приведен пример подключения библиотеки jQuery через службу Google:
Подход, основанный на использовании CDN, невыгоден в случае приложений, доставляемых пользователям по локальной сети, поскольку он приведет к тому, что все серверы будут вынуждены обращаться в Интернет для получения библиотеки jQuery, а не к локальному серверу, который, как правило, находится ближе и в состоянии обеспечить более быструю доставку файлов при одновременной экономии полосы пропускания.
Who Helped
jQuery 2.0 has been 10 months in the making, a product of the jQuery Core team: Julian Aubourg, Corey Frang, Oleg Gaidarenko, Richard Gibson, Michal Golebiowski, Mike Sherov, Rick Waldron, and Timmy Willison. Oleg and Michal joined the team during the 2.0 odyssey; we’re glad to have them aboard.
Many thanks to the other jQuery team and community members who contributed fixes: Steven Benner, Pascal Borreli, Jean Boussier, James Burke, Adam Coulombe, Tom Fuertes, Scott González, Dmitry Gusev, Daniel Herman, Nguyen Phuc Lam, Andrew Plummer, Mark Raddatz, Jonathan Sampson, Renato Oliveira dos Santos, Ryunosuke Sato, Isaac Schlueter, Karl Sieburg, Danil Somsikov, Timo Tijhof, and Li Xudong.
To those of you who tested the betas and reported bugs, we’re especially thankful for your help since it helped to make the release more solid and stable.
Essential Git
As the source code is handled by the Git version control system, it’s useful to know some features used.
Cleaning
If you want to purge your working directory back to the status of upstream, the following commands can be used (remember everything you’ve worked on is gone after these):
git reset --hard upstream/main git clean -fdx
Rebasing
For feature/topic branches, you should always use the flag to , or if you are usually handling many temporary «to be in a github pull request» branches, run the following to automate this:
git config branch.autosetuprebase local
(see for more information)
Handling merge conflicts
If you’re getting merge conflicts when merging, instead of editing the conflicted files manually, you can use the feature
. Even though the default tool looks awful/old, it’s rather useful.
The following are some commands that can be used there:
- — automerge as much as possible
- — jump to next merge conflict
- — change the order of the conflicted lines
- — undo a merge
- — mark a block to be the winner
- — mark a line to be the winner
- — save
- — quit
jQuery и AJAX
jQuery('div#intro').load('/some/fragment.html');
jQuery.get('/some/script.php', {'name': 'Simon'}, function(data) { alert('Сервер ответил: ' + data); }); // GET-запрос к /some/script.php?name=Simon jQuery.post('/some/script.php', {'name': 'Simon'}, function(data) { alert('Сервер ответил: ' + data); }); // POST-запрос к /some/script.php jQuery.getJSON('/some.json', function(json) { alert('JSON выдал: ' + json.foo + ' ' + json.bar); }); // Возвращает и преобразует ответ от /some.json как JSON jQuery.getScript('/script.js'); // GET-запрос к /script.js и eval()
Current Active Support
Desktop
- Chrome: (Current — 1) and Current
- Edge: (Current — 1) and Current
- Firefox: (Current — 1) and Current, ESR
- Internet Explorer: 9+
- Safari: (Current — 1) and Current
- Opera: Current
Mobile
- Stock browser on Android 4.0+
- Safari on iOS 7+
Workarounds for Android Browser 4.0-4.3 are present in the code base, but we no longer actively test these versions.
Any problem with jQuery in the above browsers should be reported as a bug in jQuery.
(Current — 1) and Current denotes that we support the current stable version of the browser and the version that preceded it. For example, if the current version of a browser is 24.x, we support the 24.x and 23.x versions.
Firefox ESR (Extended Support Release) is a Firefox version for use by organizations including schools, universities, businesses and others who need extended support for mass deployments. It is based on a regular release of Firefox and synced from the next regular Firefox every few releases — example ESR versions include Firefox 47, 52 & 60. At any given time there are at most two ESR versions available; jQuery supports both of them. See the Mozilla site for more information.
If you need to support older browsers like Internet Explorer 6-8, Opera 12.1x or Safari 5.1+, use .
Как подключить скрипт jQuery в html
Подключение jQuery к странице осуществляется также как и любого другого JavaScript файла. Т.е. посредством добавления в HTML тега с атрибутом , в котором необходимо задать полный или относительный путь к файлу.
Подключение последней версии jQuery:
<script src="/assets/js/jquery-3.5.1.min.js"></script>
При этом разместить можно как секции в , так и в . Но где же лучше?
Раньше (до появления режимов и ) это рекомендовалось делать перед закрывающим тегом :
... <script src="/assets/js/jquery-3.5.1.min.js"></script> </body> </html>
При таком размещении скрипт не будет блокировать парсинг веб-страницы, т.к. его загрузка и выполнение будет осуществляться в самом конце. В результате, это приведёт к тому, что пользователь увидит содержимое страницы быстрее и сможет раньше с ней начать взаимодействовать.
Если бы мы сделали это по-другому, например, поместили в раздел , то создали бы «задержку» при обработке страницы в самом её начале. А это привело бы к тому, что пользователю пришлось бы дольше ждать отображения контента страницы.
Но сейчас так делать не рекомендуется. Лучше размещать скрипты как можно выше (в разделе ) с добавлением к ним атрибута или . Эти атрибуты будут «говорить» браузеру, что скрипт нужно загрузить в фоне, не останавливая при этом основной поток обработки страницы. Это позволит сделать сайт более производительным.
... <!-- отложенная загрузка библиотеки jQuery --> <script defer src="/assets/js/jquery-3.5.1.min.js"></script> ... </head> ...
Использовать атрибут применительно к jQuery не имеет смысла, т.к. эту библиотеку мы в основном используем для изменения DOM. Но перед тем, как править DOM, он должен быть построен. Это сделать нам поможет использование атрибута . Атрибут гарантирует что скрипт выполниться только после того, как дерево DOM будет построено, но до события .
При этом, если на странице имеется несколько внешних скриптов с атрибутом , то они будут выполняться строго в том порядке, в котором они расположены в коде.
Пример отложенного подключения jQuery и своего внешнего скрипта, зависящего от этой библиотеки:
<!-- сначала выполнится jQuery --> <script defer src="/assets/js/jquery-3.5.1.min.js"></script> <!-- после jQuery свой скрипт, зависящий от jQuery --> <script defer src="/assets/js/main.min.js"></script>
При непосредственном размещении JavaScript кода в HTML документе его необходимо поместить в обработчик события DOMContentLoaded (в этом случае его код выполнится после загрузки библиотеки jQuery):
<script> document.addEventListener('DOMContentLoaded', function() { // код, зависящий от jQuery ... }); </script> <!-- отложенная загрузка jQuery --> <script defer src="/assets/js/jquery-3.5.1.min.js"></script>
Подключаем jQuery
Для того чтобы добавить jQuery на страницу, необходимо расположить тег с атрибутом , в котором указывается путь к скачанному файлу с jquery.min.js. Например, разместите следующий код в секции или до основного скрипта:
Подключаем jQuery и свой скрипт
JavaScript
<script src=»папка_со_скриптами/jquery.min.js»></script>
<script src=»папка_со_скриптами/myscript.js»></script>
//Очень часто это такой путь:
<script src=»js/jquery-3.5.0.min.js»></script>
<script src=»js/myscript.js»></script>
1 2 3 4 5 6 |
<script src=»папка_со_скриптами/jquery.min.js»></script> <script src=»папка_со_скриптами/myscript.js»></script> <script src=»js/jquery-3.5.0.min.js»></script> <script src=»js/myscript.js»></script> |
Подключение jQuery из локальной папки имеет следующие плюсы:
- Вы используете ту версию, которую считаете для сюда удобной
- Вы в любой момент можете найти файл с jQuery в папке и подключить его к другому сайту/html-странице.
- Вы не зависите от наличия/отсутствия интернета для того, чтобы написать свой код.
В том случае, когда у вас есть сайт в сети или вы уверены в стабильности своего интернета, вам стоит воспользоваться онлайн-сервисами, которые позволяют подключить jQuery из сети распределенного контента (CDN). Плюсы этого способа:
- Таких сервисов очень много, и они позволяют загрузить jQuery с ближайшего источника,
- Вы можете выбрать версию jQuery, хотя для этого вам, возможно, придется поискать нужную.
- Пользователь, просматривающий ваш сайт, уже загрузил в кэш своего браузера jQuery с того источника, который используете вы, и ваш сайт подхватит ее из кэша браузера, а значит загрузка будет очень быстрой.
Manipulation
- #13232: In 2.0beta1, using html() function on a tbody selector yields insertion of new tbody
- #13233: Unexpected behavior when iterating over and manipulating detached nodes in jquery 1.9
- #13282: QtWebKit — TypeError: ‘’ is not a valid argument for ‘Function.prototype.apply’ (evaluating ‘elem.nodeType’)
- #13596: .replaceWith should always remove the context set
- #13721: remove(“:nth-child(1)”) works differently than filter(“:nth-child(1)”).remove()
- #13722: .replaceWith argument handling is inconsistent with other manipulation methods
- #13779: .remove() changed in beta3 – now remove nodes in reverse doc order
Security Fix
The main change in this release is a security fix, and it’s possible you will need to change your own code to adapt. Here’s why: jQuery used a regex in its method to ensure that all closing tags were XHTML-compliant when passed to methods. For example, this prefilter ensured that a call like is actually converted to . Recently, an issue was reported that demonstrated the regex could introduce a cross-site scripting (XSS) vulnerability.
The HTML parser in jQuery <=3.4.1 usually did the right thing, but there were edge cases where parsing would have unintended consequences. The jQuery team agreed it was necessary to fix this in a minor release, even though some code relies on the previous behavior and may break. The function does not use a regex in 3.5.0 and passes the string through unchanged.
If you absolutely need the old behavior, using the latest version of the jQuery migrate plugin provides a function to restore the old . After including the plugin you can call and jQuery will again ensure XHTML-compliant closing tags.
However, to sanitize user input properly, we also recommend using dompurify with the option to sanitize HTML from a user. If you don’t need the old behavior, but would still like to sanitize HTML from a user, dompurify should be used without the option, starting in jQuery 3.5.0. For more details, please see the 3.5 Upgrade Guide.
Подключаем jQuery с CDN
Раньше можно было загрузить последнюю версию jQuery с официального сайта, записав такую строку:
Загрузка последней версии jQuery с оффсайта
<script src = «http://code.jquery.com/jquery-latest.js»></script>
1 | <script src=»http://code.jquery.com/jquery-latest.js»></script> |
Однако на данный момент этот код будет загружать одну и ту же версию JQuery, причем далеко не последнюю и не самую свежую, а именно 1.11.1. Поэтому использовать этот способ подключения jQuery нужно только в том случае, если вас устраивает эта версия.
Зато с официального сайта code.jquery.com вы можете загрузить/подключить на страницу различные версии этой библиотеки и других продуктов, основанных на jQuery, например, jQuery UI, jQuery Mobile или jQuery Color. Просто кликните на нужной вам версии и скопируйте код. Все версии jQuery вы найдете здесь.
Из других источников вы также можете скопировать ссылку на нужную вам версию jQuery.
- CDNJS CDN
- jsDelivr CDN
На скриншоте видно, что ссылки на ресурсах представлены на разные версии jQuery.
Выбирайте подходящий для себя вариант и вставляйте ссылку в тег .
Несколько ссылок с вышеприведенных источников, которые вы можете скопировать и вставить к себе на страницу/сайт сразу же:
Ссылки на jQuery 3.5 CDN
<!— https://code.jquery.com/ —>
<script src=»https://code.jquery.com/jquery-3.5.1.min.js»
integrity=»sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=»
crossorigin=»anonymous»></script>
<!— Google —>
<script src=»https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js»></script>
<!— microsoft.com —>
<script src=»https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.5.0.min.js»></script>
<!— https://cdnjs.com/ —>
<script src=»https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js»
integrity=»sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=» crossorigin=»anonymous»></script>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!—https//code.jquery.com/ —> <script src=»https://code.jquery.com/jquery-3.5.1.min.js» integrity=»sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=» crossorigin=»anonymous»></script> <!—-> <script src=»https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js»></script> <!—microsoft.com—> <script src=»https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.5.0.min.js»></script> <!—https//cdnjs.com/ —> <script src=»https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js» integrity=»sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=»crossorigin=»anonymous»></script> |
jQuery Core — All 1.x Versions
- jQuery Core 1.12.4 — uncompressed, minified
- jQuery Core 1.12.3 — uncompressed, minified
- jQuery Core 1.12.2 — uncompressed, minified
- jQuery Core 1.12.1 — uncompressed, minified
- jQuery Core 1.12.0 — uncompressed, minified
- jQuery Core 1.11.3 — uncompressed, minified
- jQuery Core 1.11.2 — uncompressed, minified
- jQuery Core 1.11.1 — uncompressed, minified
- jQuery Core 1.11.0 — uncompressed, minified
- jQuery Core 1.10.2 — uncompressed, minified
- jQuery Core 1.10.1 — uncompressed, minified
- jQuery Core 1.10.0 — uncompressed, minified
- jQuery Core 1.9.1 — uncompressed, minified
- jQuery Core 1.9.0 — uncompressed, minified
- jQuery Core 1.8.3 — uncompressed, minified
- jQuery Core 1.8.2 — uncompressed, minified
- jQuery Core 1.8.1 — uncompressed, minified
- jQuery Core 1.8.0 — uncompressed, minified
- jQuery Core 1.7.2 — uncompressed, minified
- jQuery Core 1.7.1 — uncompressed, minified
- jQuery Core 1.7.0 — uncompressed, minified
- jQuery Core 1.7.0 — uncompressed, minified
- jQuery Core 1.6.4 — uncompressed, minified
- jQuery Core 1.6.3 — uncompressed, minified
- jQuery Core 1.6.2 — uncompressed, minified
- jQuery Core 1.6.1 — uncompressed, minified
- jQuery Core 1.6.0 — uncompressed, minified
- jQuery Core 1.5.2 — uncompressed, minified
- jQuery Core 1.5.1 — uncompressed, minified
- jQuery Core 1.5.0 — uncompressed, minified
- jQuery Core 1.4.4 — uncompressed, minified
- jQuery Core 1.4.3 — uncompressed, minified
- jQuery Core 1.4.2 — uncompressed, minified
- jQuery Core 1.4.1 — uncompressed, minified
- jQuery Core 1.4.0 — uncompressed, minified
- jQuery Core 1.3.2 — uncompressed, minified, packed
- jQuery Core 1.3.1 — uncompressed, minified, packed
- jQuery Core 1.3.0 — uncompressed, minified, packed
- jQuery Core 1.2.6 — uncompressed, minified, packed
- jQuery Core 1.2.5 — uncompressed, minified, packed
- jQuery Core 1.2.4 — uncompressed, minified, packed
- jQuery Core 1.2.3 — uncompressed, minified, packed
- jQuery Core 1.2.2 — uncompressed, minified, packed
- jQuery Core 1.2.1 — uncompressed, minified, packed
- jQuery Core 1.2.0 — uncompressed, minified, packed
- jQuery Core 1.1.4 — uncompressed, packed
- jQuery Core 1.1.3 — uncompressed, packed
- jQuery Core 1.1.2 — uncompressed, packed
- jQuery Core 1.1.1 — uncompressed, packed
- jQuery Core 1.1.0 — uncompressed, packed
- jQuery Core 1.0.4 — uncompressed, packed
- jQuery Core 1.0.3 — uncompressed, packed
- jQuery Core 1.0.2 — uncompressed, packed
- jQuery Core 1.0.1 — uncompressed, packed
- jQuery Core 1.0.0 — uncompressed, packed
Начинаем писать код на jQuery
В вашем скрипте вы можете для начала записать код, который что-либо выводит или в консоль, или с помощью диалогового окна alert(), чтобы проверить работоспособность кода:
Проверяем скрипт на jQuery
JavaScript
$(document).ready(function(){
console.log(‘jQuery works’);
// или
alert(‘jQuery works’);
});
1 2 3 4 5 |
$(document).ready(function(){ console.log(‘jQuery works’); // или alert(‘jQuery works’); }); |
Можно использовать сокращенную форму записи:
Сокращенная запись функции $(document).ready()
JavaScript
$(function() {
console.log( «jQuery works!» );
});
1 2 3 |
$(function(){ console.log(«jQuery works!»); }); |
Вызов функции обязателен в том случае, если вы подключили скрипты в блоке ДО того, как браузер сможет прочитать и распарсить всю структуру элементов в теле документа (тег ). Если вы подключаете скрипты перед закрывающим тегом , вызывать ее необязательно, хотя некоторые плагины могут требовать обязательного ее наличия.
Достаточно 1 раз написать вызов и весь код писать внутри этой функции вне зависимости от того, 5 строк в этом коде или 225.
Вызов аналогичен обработке события , при наступлении которого браузер уже знает обо всех элементах в структуре DOM, но еще не загрузил картинки или видео. То есть вы уже можете обращаться к элементам и манипулировать ими, что чаще всего и является целью использования JavaScript и jQuery.
link jQuery Migrate Plugin
We have created the
to simplify the transition from older versions of jQuery. The plugin restores deprecated features and behaviors so that older code will still run properly on newer versions of jQuery. Use the uncompressed development version to diagnose compatibility issues, it will generate warnings on the console that you can use to identify and fix problems. Use the compressed production version to simply fix compatibility issues without generating console warnings.
There are two versions of Migrate. The first will help you update your pre-1.9 jQuery code to jQuery 1.9 up to 3.0. You can get that version here:
The second version helps you update code to run on jQuery 3.0 or higher, once you have used Migrate 1.x and upgraded to jQuery 1.9 or higher:
Changelog
GitHub changelog: Issues fixed in 3.4.0 | All changes
Ajax
- Allow custom attributes when script transport is used (#3028, 1f4375a3)
- Fix getResponseHeader(key) for IE11 (#3403, e0d94115)
Core
- Use isAttached to check for attachment of element (662083ed)
- Tiny efficiency fix to jQuery.extend / jQuery.fn.extend (#4246) (#4245, 4ffb1df8)
- Preserve CSP nonce on scripts with src attribute in DOM manipulation (#4323, )
- Preserve CSP nonce on scripts in DOM manipulation (#3541, c7c2855e)
- Support passing nonce through jQuery.globalEval (#4278, 5bdc85b8)
- Recognize Shadow DOM in attachment checks (#3504, 9b77def5)
- Prevent Object.prototype pollution for $.extend( true, … ) (753d591a)
CSS
- Ensure camel- vs kebab-cased names are not collapsed for CSS vars (f8c1e902)
- Avoid filling jQuery.cssProps (#3986, 2b5f5d5e)
- Correctly detect scrollbox support with non-default zoom (#4029, 821bf343)
- Don’t auto-append “px” to CSS variables (#4064) (#4063, 75b77b48)
- Skip the px-appending logic for animations of non-element props (f5e36bd8)
- Avoid forcing a reflow in width/height getters unless necessary (#4322, a0abd15b)
- Don’t read styles.position in the width/height cssHook unless necessary (#4185, 354f6036)
- Don’t auto-append “px” to possibly-unitless CSS grid properties (#4007, f997241f)
Dimensions
- fix computing outerWidth on SVGs (#3964, e743cbd2)
- avoid fetching boxSizing when setting width/height – this avoids forcing a reflow in some cases (#3991, 73d7e625)
- fall back to offsetWidth/Height for border-box in IE (#4102, 315199c1)
Event
- Prevent leverageNative from double-firing focusin (fe5f04de)
- Add “code” property to Event object (#3978, 899c56f6)
- Leverage native events for focus/blur/click; propagate additional data (#1741, #3423, #3751, #4139, 669f720e)
- Respect script nomodule attribute in DOM manipulation (#4281, e4de8b46)
- Restore _evalUrl jQuery.ajax calls to dataType: script (13de7c9e)
- Only evaluate HTTP-successful script src (#4126, c2026b11)
Internal
- Seasonal update of uglify and its options (09684ba3)
- Remove unnecessary ESLint exception (dc05f3c1)
- Run the basic test suite in jsdom (0ec25abb)
- Remove manual QUnit fixture resetting (84b6a0be)
- Make Promises/A+ tests use the dot reporter instead of the default (ca9356ec)
- Update QUnit from 1.23.1 to 2.9.2 (6ced2639)
- Run Karma browser tests on Node.js 10 instead of 8 (16ad9889)
- Update jsdom; migrate a test with Symbol polyfill to an iframe test (9cb124ed)
- Remove obsolete globals from ESLint configuration (c10945d0)
- Update most dependencies (8751e9ef)
- Update test code for compatibility with QUnit 2.x (#4297) (c3498187)
- Advise to create test cases on JS Bin or CodePen, drop JSFiddle (da44ff39)