Обновление на версию 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-методов
$.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