
UPD: по просьбам читателей добавлен список ключевых изменений.
В прошедшую пятницу, 20 мая вышел jQuery 3.0 Release Candidate – практически финальная версия jQuery 3.0, которую уже можно испробовать в деле. После релиза третьей версии jQuery, ветки 1.12 и 2.2 будут некоторое время получать критические патчи, но новых функций или серьезных изменений не получат. jQuery 3.0 не будет поддерживать IE 6, 7 и 8 версии, поэтому если вам важна поддержка этих браузеров – можете использовать последний релиз 1.12.
Авторы jQuery ожидают что переход на новую версию не вызовет проблем у большинства пользователей, однако в ней присутствуют некоторые значительные изменения, которые могут быть несовместимы со старым кодом. Для таких случаев есть гайд по переходу на новую версию и плагин миграции, призванные устранить проблемы совместимости.
Ссылки для скачивания jQuery 3.0 Release Candidate:
Полная версия: https://code.jquery.com/jquery-3.0.0-rc1.js
Минифицированная: https://code.jquery.com/jquery-3.0.0-rc1.min.js
Также есть вариант установки новой версии плагина через npm:
npm install jquery@3.0.0-rc1
jQuery Migrate 3.0-rc plugin:
Полная версия: code.jquery.com/jquery-migrate-3.0.0-rc1.js
Минифицированная: code.jquery.com/jquery-migrate-3.0.0-rc1.min.js
Установка через npm:
npm install jquery-migrate@3.0.0-rc1
Краткий список изменений можно найти на странице блога jQuery, более полный – на страничке jQuery Core 3.0 Upgrade Guide и в баг-трекере на гитхабе.
Список ключевых изменений:
Поддержка браузеров:
- Internet Explorer: 9+
- Chrome, Edge, Firefox, Safari: текущая и предыдущая версии
- Opera: текущая версия
- Safari Mobile iOS: 7+
- Android 4.0+
Ajax
- Удалены методы success, error и complete deffered объектов из jQuery.ajax – вместо них предлагается использовать стандартные done, fail, и always.
- Кросс-доменные скрипты при запросах через jQuery.ajax() и jQuery.get() дожны быть объявлены как dataType: «script», для предотвращения возможности атак через отправку скрипта как обычного контента. При этом jQuery.getScript() устанавливает dataType: «script» по умолчанию, как и раньше.
- jQuery.ajax() больше не обрезает hash из URL. Если конечный сервер не поддерживает такой адрес – придется убрать hash самостоятельно.
- jQuery.get() и jQuery.post() теперь поддерживают параметр settings ( github.com/jquery/jquery/issues/1986 )
Атрибуты
- .removeAttr() больше не устанавливает значение false для таких атрибутов как checked, selected, и readonly. Вместо этого, если нужно, предлагается использовать .prop( «checked», false )
- Множественный select (select multiple), с пустым списком выбранных значений возвращает пустой массив
- SVG теперь поддерживает классовые методы, такие как .addClass() и .hasClass()
- Объявлен устаревшим метод .toggleClass() без аргументов и .toggleClass( Boolean ) – поведение пока остается прежним, но не рекомендуется к использованию, и возможно в будущем будет изменено.
Ядро
- jQuery 3.0 работает в Strict mode («use strict»)
- Обработчики document-ready теперь работают асинхронно
- Удалены устаревшие свойства .context и .selector
- Удалены ранее незадокументированные методы jQuery.swap, jQuery.buildFragment, jQuery.domManip
- Методы width(), .height(), .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight(), .offsetTop() и .offsetLeft() теперь возвращают undefined вместо null
- Цикл for...of теперь может использоваться для коллекций элементов jquery (вместо .each(), например)
- Включена формальная поддержка jQuery.ready promise
- Метод jQuery.unique() переименован в jQuery.uniqueSort()
- jQuery.parseJSON() объявлен устаревшим, предлагается использовать нативный JSON.parse()
Data
- Метод .data() теперь поддерживает имена с дефисом
Deferred
- jQuery.Deferred теперь совместим с Promises/A+ (более подробно в jquery.com/upgrade-guide/3.0/#deferred )
Размеры экранов
- Методы .width(), .height(), .css(«width»), and .css(«height») теперь могут возвращать не только целочисленные значения
- Методы .width(), .height(), .css(«width»), и .css(«height») объекта window теперь включают ширину скроллбара
Эффекты
- Изменено влияние методов .show(), .hide(), и .toggle() на css-свойства (подробнее в таблице docs.google.com/spreadsheets/d/1UaISjcS3UMxVJ7eSBIXtK-jqF8Grl67w640peCqlkoc/edit#gid=0 )
- Анимации теперь используют requestAnimationFrame
События
- Удалены методы .load(), .unload(), и .error()
- Удалено событие ready из .on(«ready», fn)
- Удалена нормализация event.pageX и event.pageY
- Удалены jQuery.event.props и jQuery.event.fixHooks
- Объявлены устаревшими методы bind() и .delegate()
Манипуляции
- .wrapAll(function) теперь вызывает функцию только один раз
Offset
- Применение .offset() к некорректному jquery-селектору теперь вызывает ошибку
Селекторы
- Изменено поведение селекторов :hidden и :visible
- jQuery("#") и .find("#") теперь не являются корректными селекторами
- Новый метод jQuery.escapeSelector()
- Объявлены устаревшими jQuery.expr[":"] и jQuery.expr.filters
Сериализация
- jQuery.param() больше не конвертирует %20 в символ «плюс»
Буду рад вашим комментариям и замечаниям. О найденных ошибках и недочетах сообщайте в личку.
Спасибо!