Обновление на версию 3.х
В первую очередь данное обновление коснулось старых версий браузеров, точнее, теперь поддерживаются следующие версии:
Internet Explorer 9+
Chrome, Edge, Firefox и Safari — благодаря встроенной системе обновлений в эти браузеры поддерживается текущая и предыдущая версии браузеров
Opera — в фаворитах не ходит, поэтому поддерживают только текущую версию
Safari Mobile iOS 7+
Android 4+
Кроме этого, было внесено много изменений, которые ломают обратную совместимость с предыдущими версиями. Все их перечислять не буду, остановлюсь на тех, с которыми уже пришлось столкнуться.
Большинство приведенных изменений касается не только версии 3.x, но и старых веток, начиная с версий 1.12.x и 2.2.x
AJAX
Метод
jQuery.ajax()теперь совместим с Promise и вы можете использовать методыthen()иcatch():$.ajax({url:"/get-my-page.html" /* и т.д. */ }) .then(function() { /* всё ОК */ }) .catch(function() { /* ошибка */ })Добавлена новая сигнатура для вызова двух AJAX-методов
$.get(settings)и$.post(settings), теперь настройки совместимы с$.ajax(settings).При подключении скриптов из другого домена теперь в обязательном порядке требует указания
dataType: "script"При выполнении AJAX-запросов и указании URL с хэшем последний более не обрезается, а отправляется на сервер как есть.
Атрибуты
Раньше метод
removeAttr()дляtrue/falseатрибутов типа «checked», «selected» и «readonly» втихую выставлял соответствующее свойство DOM-элемента в «false», теперь извольте делать сие ручками:Если вызовете метод
val()для мультиселекта, в котором ничего не выбрано, то получите в ответ пустой массив, а раньше былnullДля SVG заработали методы по манипуляции с классами (хотя полноценной поддержки SVG в jQuery нет).
Core
Ядро jQuery теперь запускается в strict mode.
Обработчики события
document-readyтеперь запускаются асинхронно, т.е. если какой-то обработчик сфейлил, то это не повлияет на запуск других обработчиков.Метод
$.isNumeric()более не пробует кастовать методtoString()для произвольных объектов (кому это надо было?).Методы
width(),height()и так далее; раньше, вызвав их для пустой коллекции объектов, мы получалиnull, теперь –undefined.Официально добавлен promise
jQuery.ready, который очень удобно заюзать вместе с$.when():Метод
jQuery.unique()переименован вjQuery.uniqueSort()Метод
jQuery.parseJSON()устарел, переходите наJSON.parse()Внутреннее хранилище данных перешло на camelCase, это важно для тех, кто использовал его, не прибегая к методу
data()
Объект Deferred
Как я уже упоминал ранее, объект Deferred теперь совместим с Promise из ES-2015, а это нам грозит переписыванием методов done() на then() и fail() на catch().
Второй важный момент — callback-функции, согласно спецификации ES-2015, должны принимать только один аргумент: для успешного выполнения это некий результат выполнения, в случае возникновения ошибки функция это будет сама ошибка. Если у вас не получается так сделать, то старые функции done() и fail() всё ещё остаются с нами, хоть чую, и их скоро выпилят:
Размеры
Небольшие изменения постигли функции width(), height(), css("width"), и css("height"), теперь они могут возвращать не только integer значение высоты и ширины, но и float, такая точность связана с переходом на использование getBoundingClientRect().
Ещё момент, вызовы $(window).outerWidth() и $(window).outerHeight() теперь будут включать в себя размеры скролбаров окна.
Эффекты
Анимация переехала на использование requestAnimationFrame API, так что теперь всё стало быстрее и красивее.
Функции .show(), .hide() и .toggle() научились запоминать предыдущее состояние CSS-свойства display.
Количество аргументов easing-функций сократили до одного аргумента, который содержит прогресс анимации от 0 до 1.
События
Удалены shorthand-методы для следующих событий: load(), unload() и error(); связано данное изменение с конфликтами возникающие при использовании данных методов, так что переписывайте на on():
Удалено синтетическое событие ready, так что on("ready", fn) более не работает, используйте синтаксис $(fn).
Делегированные события, в случае, если их пытаются повесить c использованием неправильных селекторов, теперь будут сразу ругаться и выбрасывать ошибку. Дебажить станет легче:
Селекторы
За селекторы :hidden и :visible теперь отвечает getClientRects(); если у запрашиваемого элемента есть layout box, значит, он считается видимым. Как результат, пустой <span> или <br/> теперь считаются видимыми.
Кривые селекторы $("#") и find("#") теперь будут вызывать ошибку.
Описал многое, но не всё, полное руководство доступно на официальном сайте:
Last updated