(Перевод этого рассказа от авторов популярнейшей библиотеки будет весьма поучительным для всех, кто хотел бы держать руку на пульсе тектоники браузеров в свете решаемых проблем с парсингом DOM на данном этапе.)
Много воды утекло со времени последнего крупного релиза, и вы, конечно, заслуживаете обновлений. Поэтому мы рады объявить о выходе первой альфа-версии jQuery!
Несмотря на номер версии 3.0, мы ожидаем, что этот выпуск не доставит слишком много неприятностей при модернизации кода. Да, есть несколько критичных изменений, что оправдано сменой старшего индекса версии, но, надеемся, что эти переделки не повлияют на многих. Плагин jQuery Migrate поможет выявить проблемы совместимости кода. Также, ваши мнения об этой альфе нам сильно помогут, поэтому, пожалуйста, попробуйте её на существующем коде и плагинах!
Первый из релизов, jQuery 3.0, поддерживается новыми браузерами и IE 9+. Второй, jQuery Compat 3.0, поддерживается в IE 8+. Как бонус, оба релиза будут поддерживаться Яндекс-браузером, выпущенным в 2012-м. Вы можете получить файлы из jQuery CDN или по прямым ссылкам:
code.jquery.com/jquery-3.0.0-alpha1.js
code.jquery.com/jquery-compat-3.0.0-alpha1.js
Можно установить их через npm:
Здесь обсуждены только основные из новых функций, изменений и исправлений. Полный список изменений приведён ниже и без проблем отслеживается на нашем GitHub-аккаунте. На GitHub, кроме того, можно увидеть ещё не внедрённые функции, которые планируются в более поздних бетах и финальных версиях.
Вся суть .hide() в jQuery заключается в установке свойства 'display: none' в CSS. Соответственно, .show() обновит экран так, что элемент отображается снова (при условии, что его родители не скрыты). Всё просто, верно?
Ладно, не всё. На самом деле, есть много сложных особых случаев, которые люди просили нас «исправить» на протяжении многих лет, которые оказались в запутанном клубке принципов. Например, что, если элемент не установлен в display: none в таблице стилей? jQuery будет пытаться определить его принудительной установкой display: block на элементе. Хорошо, но что, если блочный по умолчанию элемент <li> был установлен в display: inline в другом правиле таблицы стилей? Что насчёт случая, когда вы вызываете эти методы на элементе перед тем, как он был добавлен к документу, и мы не знаем, какое значение будет иметь display? Определение всего этого создаёт дополнительную работу. Иногда мы ещё основываемся на предположениях, а результат оказывается не таким.
Поскольку эти методы добавляют атрибут style к элементу, они не смогут хорошо работать с техниками типа адаптивного дизайна, где видимость элементов может зависеть от media-запросов. Это приводит к необходимости обработчиков jQuery, которые слушают события orientationchange или resize, чтобы вручную скрыть или отобразить части страницы; это разрушает элегантность решения, которое пытались сделать через медиазапросы.
Вы можете видеть, что jQuery уже на полпути ко всеобщему безумию, и нет смысла так завершать путешествие. Особые случаи и проверки были бы не только сложными и неполными, но и вызвали бы существенные проблемы производительности на больших страницах.
Вместо этого, мы экспериментально игнорируем эволюцию этих методов и возвращаемся к простой изначальной модели. Это нарушит некоторый код. Если у вас есть элементы, в стилях которых прописаны display: none, метод .show() не будет переопределять это свойство. Таким образом, самое важное правило для перехода на jQuery 3.0 — это: Не используйте таблицы стилей, чтобы установить значение по умолчанию display: none, а затем пытаться использовать .show() — или другой метод, который показывает элементы — .slideDown() или .fadeIn() — чтобы сделать его видимым.
Если вам нужен элемент, который будет скрыт по умолчанию, лучше добавить имя класса типа «hidden» к элементу и определить, что класс будет display: none в стилях. Затем вы можете добавить или удалить этот класс, используя в jQuery методы .addClass() и .removeClass() для управления видимостью. Кроме того, вы можете иметь .ready() обработчик вызова .hide() на элементах, прежде чем они будут отображены на странице. Или, если вы действительно должны хранить стили по умолчанию, можно использовать .css(«display», «block») (или другое значение display), чтобы переопределить стили.
Мы знаем, что это, вероятно, будет одним из самых спорных и сложных изменений в jQuery 3.0, поэтому мы хотели выложить в релиз его как можно раньше, чтобы увидеть эффект. Пожалуйста, дайте нам знать, как она влияет на ваш код и что необходимо изменить для того, чтобы работать с этой новой моделью.
github.com/jquery/jquery/issues/1767
github.com/jquery/jquery/issues/2057
github.com/jquery/jquery/issues/2308
Мы обновили нашу реализацию .data() для лучшего соответствия со спецификацией HTML5 по данным. Все ключи преобразованы из kebab-case в camelCase, независимо от способа доступа, и цифры больше не участвуют в преобразовании. Например, мы не различаем «foo-bar» и «fooBar», но различаем «foo-42» и «foo42». Эти изменения в основном будут играть роль при получении всех данных с помощью вызова .data() без аргументов или при попытке получить доступ к данным, используя преобразованный ключ .data(«foo42») вместо оригинального .data(«foo-42»).
github.com/jquery/jquery/issues/1751
Объекты jQuery.Deferred были обновлены для совместимости с Promises/A+ и ES2015 Promises, проверяется по Promises/A+ Compliance Test Suite. Это означает введение метода .catch() и несколько крупных изменений в методе .then():
Рассмотрим следующий код, в котором родитель Deferred отклоняется, и дочерний коллбек выбрасывает исключение:
В jQuery 3.0 это выдаст «parent resolved» перед вызовом любого коллбека, каждый ребенок обратного вызова выдаст «fulfilled bar», и внуки будут отклонены с ошибкой «baz». В предыдущих версиях выдалось бы «rejected bar» (ребенок Deferred отклонен вместо выполнения) один раз, а затем выполнение прекратилось бы из-за с неперехваченной ошибки «baz» («parent resolved» не выводится и внуки остаются невыполненными).
В то время как пойманные исключения были преимуществом для отладки в браузере, это гораздо более декларативный (т.е. явный) способ обработать их коллбеком при отказе. Имейте в виду, что это требует от вас всегда добавлять хотя бы один такой коллбек при работе с промисами. В противном случае, любые ошибки останутся незамеченными.
Старое поведение можно восстановить путем замены .then() на ныне устаревший метод .pipe() (который имеет одинаковую сигнатуру).
jQuery.when был также обновлен, чтобы принять любой объект thenable, который включает в себя нативные промисы.
github.com/jquery/jquery/issues/1722
github.com/jquery/jquery/issues/2102
Объект jqXHR это обещание (Promise), но он имеет дополнительные методы, такие как .abort(), так что вы можете остановить запрос после того, как он был сделан.
Поскольку пользователи всё чаще выбирают шаблон Promise для асинхронной работы типа AJAX, идея возврата особых состояний для Promise из jQuery.ajax не очень хороша.
success, error, complete
done, fail, always
Обратите внимание, что это не влияет на все обратные вызовы с тем же именем, которые продолжают существовать и не считаются устаревшими. Это влияет только на методы промисов!
github.com/jquery/jquery/issues/2084
Возможно, в глубоких рассуждениях вы задавались вопросом «Что есть смещение окна?» Тогда вы, наверное, понимали, что это сумасшедший вопрос — как можно вообще давать смещаться окну?
Ранее jQuery иногда пыталась в таких случаях возвращать что-то осмысленное, а не выставлять ошибки. В данном случае при запросе смещения окна был ответ {top: 0, left: 0}. В этой альфа jQuery 3.0 мы экспериментируем с идеей выдавать в таких случаях ошибки, чтобы не игнорировать бессмысленные запросы. Пожалуйста, попробуйте альфу и посмотрите, есть ли код, зависящий от jQuery, скрывающий проблемы с неправильным кодом.
github.com/jquery/jquery/issues/1784
Ранее jQuery возвращал округлённые значения ширины и высоты. Некоторые браузеры возвращают субпиксельные значения — такие как IE и Firefox — и иногда пользователям нужна эта точность. Мы не ожидаем, что это изменение окажет большое влияние на ваш код, но дайте нам знать, если это происходит.
github.com/jquery/jquery/issues/1724
.load, .unload и .error объявлены устаревшими, начиная с jQuery 1.8. Используйте .on() для регистрации обработчиков.
github.com/jquery/jquery/issues/2286
Эти методы всегда были только для внутреннего использования и не были задокументированы. Мы, наконец, сделали их приватными, чтобы избежать путаницы.
github.com/jquery/jquery/issues/2224
github.com/jquery/jquery/issues/2225
На платформах, поддерживающих requestAnimationFrame API, кроме IE8-9, jQuery теперь использует этот API при анимации. Это должно дать более гладкие анимации, использовать меньше процессорного времени и сохранить батарею на мобильных устройствах.
jQuery пытался внедрить requestAnimationFrame несколько лет назад, но тогда были серьезные проблемы с совместимостью с существующим кодом. Мы думаем, что решили большинство этих вопросов путем приостановки анимации, когда вкладка браузера закрыта. Тем не менее, любой код, зависящий от анимации, и запускаемый практически в режиме реального времени, делает неверным это предположение.
До jQuery 3.0 метод .unwrap() не принимал аргументов. Аргумент selector указывает, какие обёртки нужно удалить.
github.com/jquery/jquery/issues/1744
Благодаря некоторой исследовательской работе Paul Irish в Google, мы определили некоторые случаи, когда могли бы пропустить кучу лишней работы, когда селекторы типа :visible используются много раз в документе. Это иногда улучшает скорость до 17 раз!
Имейте в виду, что даже при таком улучшении селекторы типа :visible и :hidden могут быть затратными, потому что они зависят от браузера, чтобы определить, отображаются ли элементы на странице. Это может потребовать, в худшем случае, полного перерасчета CSS и макета страницы! Мы, не препятствуя их использованию, рекомендуем проверить страницы с такими селекторами на производительность.
github.com/jquery/jquery/issues/2042
Большое спасибо всем, кто принимал участие в тестировании этого релиза, сообщая об ошибках, или предоставляя патчи, в том числе, по именам:
Здесь — полный список изменений со времён последних официальных релизов (1.11.3 и 2.1.4).
Много воды утекло со времени последнего крупного релиза, и вы, конечно, заслуживаете обновлений. Поэтому мы рады объявить о выходе первой альфа-версии jQuery!
Несмотря на номер версии 3.0, мы ожидаем, что этот выпуск не доставит слишком много неприятностей при модернизации кода. Да, есть несколько критичных изменений, что оправдано сменой старшего индекса версии, но, надеемся, что эти переделки не повлияют на многих. Плагин jQuery Migrate поможет выявить проблемы совместимости кода. Также, ваши мнения об этой альфе нам сильно помогут, поэтому, пожалуйста, попробуйте её на существующем коде и плагинах!
Первый из релизов, jQuery 3.0, поддерживается новыми браузерами и IE 9+. Второй, jQuery Compat 3.0, поддерживается в IE 8+. Как бонус, оба релиза будут поддерживаться Яндекс-браузером, выпущенным в 2012-м. Вы можете получить файлы из jQuery CDN или по прямым ссылкам:
code.jquery.com/jquery-3.0.0-alpha1.js
code.jquery.com/jquery-compat-3.0.0-alpha1.js
Можно установить их через npm:
npm install jquery@3.0.0-alpha1
npm install jquery-compat@3.0.0-alpha1
Крупные изменения
Здесь обсуждены только основные из новых функций, изменений и исправлений. Полный список изменений приведён ниже и без проблем отслеживается на нашем GitHub-аккаунте. На GitHub, кроме того, можно увидеть ещё не внедрённые функции, которые планируются в более поздних бетах и финальных версиях.
Упрощённые методы .show() и .hide()
Вся суть .hide() в jQuery заключается в установке свойства 'display: none' в CSS. Соответственно, .show() обновит экран так, что элемент отображается снова (при условии, что его родители не скрыты). Всё просто, верно?
Ладно, не всё. На самом деле, есть много сложных особых случаев, которые люди просили нас «исправить» на протяжении многих лет, которые оказались в запутанном клубке принципов. Например, что, если элемент не установлен в display: none в таблице стилей? jQuery будет пытаться определить его принудительной установкой display: block на элементе. Хорошо, но что, если блочный по умолчанию элемент <li> был установлен в display: inline в другом правиле таблицы стилей? Что насчёт случая, когда вы вызываете эти методы на элементе перед тем, как он был добавлен к документу, и мы не знаем, какое значение будет иметь display? Определение всего этого создаёт дополнительную работу. Иногда мы ещё основываемся на предположениях, а результат оказывается не таким.
Поскольку эти методы добавляют атрибут style к элементу, они не смогут хорошо работать с техниками типа адаптивного дизайна, где видимость элементов может зависеть от media-запросов. Это приводит к необходимости обработчиков jQuery, которые слушают события orientationchange или resize, чтобы вручную скрыть или отобразить части страницы; это разрушает элегантность решения, которое пытались сделать через медиазапросы.
Вы можете видеть, что jQuery уже на полпути ко всеобщему безумию, и нет смысла так завершать путешествие. Особые случаи и проверки были бы не только сложными и неполными, но и вызвали бы существенные проблемы производительности на больших страницах.
Вместо этого, мы экспериментально игнорируем эволюцию этих методов и возвращаемся к простой изначальной модели. Это нарушит некоторый код. Если у вас есть элементы, в стилях которых прописаны display: none, метод .show() не будет переопределять это свойство. Таким образом, самое важное правило для перехода на jQuery 3.0 — это: Не используйте таблицы стилей, чтобы установить значение по умолчанию display: none, а затем пытаться использовать .show() — или другой метод, который показывает элементы — .slideDown() или .fadeIn() — чтобы сделать его видимым.
Если вам нужен элемент, который будет скрыт по умолчанию, лучше добавить имя класса типа «hidden» к элементу и определить, что класс будет display: none в стилях. Затем вы можете добавить или удалить этот класс, используя в jQuery методы .addClass() и .removeClass() для управления видимостью. Кроме того, вы можете иметь .ready() обработчик вызова .hide() на элементах, прежде чем они будут отображены на странице. Или, если вы действительно должны хранить стили по умолчанию, можно использовать .css(«display», «block») (или другое значение display), чтобы переопределить стили.
Мы знаем, что это, вероятно, будет одним из самых спорных и сложных изменений в jQuery 3.0, поэтому мы хотели выложить в релиз его как можно раньше, чтобы увидеть эффект. Пожалуйста, дайте нам знать, как она влияет на ваш код и что необходимо изменить для того, чтобы работать с этой новой моделью.
github.com/jquery/jquery/issues/1767
github.com/jquery/jquery/issues/2057
github.com/jquery/jquery/issues/2308
Особый случай с именами в .data()
Мы обновили нашу реализацию .data() для лучшего соответствия со спецификацией HTML5 по данным. Все ключи преобразованы из kebab-case в camelCase, независимо от способа доступа, и цифры больше не участвуют в преобразовании. Например, мы не различаем «foo-bar» и «fooBar», но различаем «foo-42» и «foo42». Эти изменения в основном будут играть роль при получении всех данных с помощью вызова .data() без аргументов или при попытке получить доступ к данным, используя преобразованный ключ .data(«foo42») вместо оригинального .data(«foo-42»).
github.com/jquery/jquery/issues/1751
jQuery.Deferred теперь совместим с Promises/A+
Объекты jQuery.Deferred были обновлены для совместимости с Promises/A+ и ES2015 Promises, проверяется по Promises/A+ Compliance Test Suite. Это означает введение метода .catch() и несколько крупных изменений в методе .then():
- Исключение, в .then() обратного вызова теперь выставляет значение отказа. Ранее исключения пропускали всё, вплоть до прерывания коллбека и необратимо блокировали оба объекта Deferred — родителя и потомка.
- Состояние разрешения в Deferred создаётся методом .then() и теперь контролируется его коллбеками — исключением стали значения отклонения, и non-thenable возвраты стали полноценно завершающими значениями. Ранее возвраты из обработчиков отклонения становились значениями отклонения.
- Коллбеки всегда вызываются асинхронно. Раньше они могли быть вызваны сразу после связывания или разрешения, в зависимости от того, что пришло последним.
- Коллбеки из Progress больше не могут разрешать объекты Deferred, к которым они привязаны.
Рассмотрим следующий код, в котором родитель Deferred отклоняется, и дочерний коллбек выбрасывает исключение:
var parent = jQuery.Deferred();
var child = parent.then( null, function() {
return "bar";
});
var callback = function( state ) {
return function( value ) {
console.log( state, value );
throw new Error( "baz" );
};
};
var grandchildren = [
child.then( callback( "fulfilled" ), callback( "rejected" ) ),
child.then( callback( "fulfilled" ), callback( "rejected" ) )
];
parent.reject( "foo" );
console.log( "parent resolved" );
В jQuery 3.0 это выдаст «parent resolved» перед вызовом любого коллбека, каждый ребенок обратного вызова выдаст «fulfilled bar», и внуки будут отклонены с ошибкой «baz». В предыдущих версиях выдалось бы «rejected bar» (ребенок Deferred отклонен вместо выполнения) один раз, а затем выполнение прекратилось бы из-за с неперехваченной ошибки «baz» («parent resolved» не выводится и внуки остаются невыполненными).
В то время как пойманные исключения были преимуществом для отладки в браузере, это гораздо более декларативный (т.е. явный) способ обработать их коллбеком при отказе. Имейте в виду, что это требует от вас всегда добавлять хотя бы один такой коллбек при работе с промисами. В противном случае, любые ошибки останутся незамеченными.
Старое поведение можно восстановить путем замены .then() на ныне устаревший метод .pipe() (который имеет одинаковую сигнатуру).
jQuery.when был также обновлен, чтобы принять любой объект thenable, который включает в себя нативные промисы.
github.com/jquery/jquery/issues/1722
github.com/jquery/jquery/issues/2102
Удалены особые состояния Deferred методов в jQuery.ajax
Объект jqXHR это обещание (Promise), но он имеет дополнительные методы, такие как .abort(), так что вы можете остановить запрос после того, как он был сделан.
Поскольку пользователи всё чаще выбирают шаблон Promise для асинхронной работы типа AJAX, идея возврата особых состояний для Promise из jQuery.ajax не очень хороша.
success, error, complete
done, fail, always
Обратите внимание, что это не влияет на все обратные вызовы с тем же именем, которые продолжают существовать и не считаются устаревшими. Это влияет только на методы промисов!
github.com/jquery/jquery/issues/2084
Не игнорировать случаи ошибок
Возможно, в глубоких рассуждениях вы задавались вопросом «Что есть смещение окна?» Тогда вы, наверное, понимали, что это сумасшедший вопрос — как можно вообще давать смещаться окну?
Ранее jQuery иногда пыталась в таких случаях возвращать что-то осмысленное, а не выставлять ошибки. В данном случае при запросе смещения окна был ответ {top: 0, left: 0}. В этой альфа jQuery 3.0 мы экспериментируем с идеей выдавать в таких случаях ошибки, чтобы не игнорировать бессмысленные запросы. Пожалуйста, попробуйте альфу и посмотрите, есть ли код, зависящий от jQuery, скрывающий проблемы с неправильным кодом.
github.com/jquery/jquery/issues/1784
.width(), .height(), .css(«width»), и .css(«height») стали возвращать дробные значения (если позволяет браузер)
Ранее jQuery возвращал округлённые значения ширины и высоты. Некоторые браузеры возвращают субпиксельные значения — такие как IE и Firefox — и иногда пользователям нужна эта точность. Мы не ожидаем, что это изменение окажет большое влияние на ваш код, но дайте нам знать, если это происходит.
github.com/jquery/jquery/issues/1724
Удалены устаревшие псевдонимы событий
.load, .unload и .error объявлены устаревшими, начиная с jQuery 1.8. Используйте .on() для регистрации обработчиков.
github.com/jquery/jquery/issues/2286
jQuery.swap, jQuery.buildFragment и jQuery.domManip более недоступны
Эти методы всегда были только для внутреннего использования и не были задокументированы. Мы, наконец, сделали их приватными, чтобы избежать путаницы.
github.com/jquery/jquery/issues/2224
github.com/jquery/jquery/issues/2225
Анимации теперь используют requestAnimationFrame
На платформах, поддерживающих requestAnimationFrame API, кроме IE8-9, jQuery теперь использует этот API при анимации. Это должно дать более гладкие анимации, использовать меньше процессорного времени и сохранить батарею на мобильных устройствах.
jQuery пытался внедрить requestAnimationFrame несколько лет назад, но тогда были серьезные проблемы с совместимостью с существующим кодом. Мы думаем, что решили большинство этих вопросов путем приостановки анимации, когда вкладка браузера закрыта. Тем не менее, любой код, зависящий от анимации, и запускаемый практически в режиме реального времени, делает неверным это предположение.
.unwrap(selector)
До jQuery 3.0 метод .unwrap() не принимал аргументов. Аргумент selector указывает, какие обёртки нужно удалить.
github.com/jquery/jquery/issues/1744
Значительное ускорение для некоторых собственных jQuery-селекторов
Благодаря некоторой исследовательской работе Paul Irish в Google, мы определили некоторые случаи, когда могли бы пропустить кучу лишней работы, когда селекторы типа :visible используются много раз в документе. Это иногда улучшает скорость до 17 раз!
Имейте в виду, что даже при таком улучшении селекторы типа :visible и :hidden могут быть затратными, потому что они зависят от браузера, чтобы определить, отображаются ли элементы на странице. Это может потребовать, в худшем случае, полного перерасчета CSS и макета страницы! Мы, не препятствуя их использованию, рекомендуем проверить страницы с такими селекторами на производительность.
github.com/jquery/jquery/issues/2042
Благодарности
Большое спасибо всем, кто принимал участие в тестировании этого релиза, сообщая об ошибках, или предоставляя патчи, в том числе, по именам:
Chris Antaki, Jason Bedard, Leonardo Braga, Bastian Buchholz и ещё 10+ строк фамилий
Chris Antaki, Jason Bedard, Leonardo Braga, Bastian Buchholz, Anne-Gaelle Colom, David Corbacho, Brenard Cubacub, Hamish Dickson, Ben Edelman, Stephen Edgar, elas7, flexphperia, Corey Frang, Xue Fuqiao, Oleg Gaidarenko, Richard Gibson, Michal Golebiowski, Scott Gonzalez, goob, Veaceslav Grimalschi, Mu Haibao, Dan Hart, Frederic Hemberger, Nicolas Henry, Daniel Herman, Jon Hester, Victor Homyakov, Winston Howes, Daniel Husar, Essam Al Joubori, Veres Lajos, George Mauer, Richard McDaniel, Amit Merchant, Calvin Metcalf, Dave Methvin, MightyBranch, Nazar Mokrynskyi, Matthew Mueller, Martin Naumann, Alexander O’Mara, Randson Oliveira, Gilad Peleg, James Pearce, PJ, Senya Pugach, Aditya Raghavan, Chris Rebert, Aurelio De Rosa, Gabriel Schulhof, Mike Sidorov, Nick Stefan, Arthur Stolyar, Timo Tijhof, Ben Toews, Thomas Tortorini, Shivaji Varma, Arthur Verschaeve, Rick Waldron, Bin Xin, Imran M Yousuf, Jorn Zaefferer.
Все изменения
Здесь — полный список изменений со времён последних официальных релизов (1.11.3 и 2.1.4).
Общие для обоих релизов jQuery и jQuery Compat
Ajax
- Всегда использовать инъекции скрипта в globalEval ( # 1449, bbdfbb4 )
- Удалить JSONP-коллбеки через метод «jQuery#removeProp» ( # 2323, a2ae215 )
- удалить зависимость событий от модуля AJAX ( 4e7f34f )
- Исправление прерванного запроса в ajaxSend ( # 1775, 598ed05 )
- использовать тег якоря для разбора URL ( # 1875, b091fdb )
- Fix обнаружения кросс-домена для нестандартного порта ( 83b038f )
- $.post И $.get теперь могут получать опции ( # 1986, 89ce0af )
- упростить одиночный Ajax вызов и добавить пояснительный комментарий ( 0ac28ed )
- сделать jQuery#load поле «тип» явным ( 4ef120d )
- заменить «jqXHR.complete» callback на «always» ( 97ef1f2 )
- удалить устаревшие расширения из Ajax promise ( # 2084, 9d1b989 )
- удалитm второй аргумент в jQuery#each ( a4715f4 )
- удалить обработчик «OnUnload» ( a117dd0 )
- Удалить остатки синонимов событий ( 38a6697 )
Атрибуты
- добавить класс для SVG манипуляций ( # 2199, 20aaed3 )
- вернуть null, когда атрибут не существует ( # 2118, aaeed53 )
- Использовать опцию val hook в select val hook и упростить его ( # 1902, f6302b0 )
- удалить ненужные проверки на null ( 55ac56a )
- исправить тест возврата значения в new ( 5dc4616 )
- вернуться к возвращению null для не-элементов ( 7632b74 )
- вернуться к возвращению null для несуществующих атрибутов ( +2905961 )
Обратные вызовы
- Уменьшить размер ( 4cbf02d )
- Не прерывать выполнение на .lock() ( # 1990, 32bf917 )
- No object starts out locked ( # 1989, 0d829f0 )
- Отключение обратного вызова должно предотвратить запуск ( # 1790, bc1cb12 )
Ядро
- Вернуть пустой массив вместо null для parseHTML("") ( # 1997, 4116914 )
- использовать document.implemenation.createHTMLDocument в jQuery.parseHTML ( 58c2460 )
- Следовать спецификации AMD для define ( 892625b )
- Выдать ошибку на $("#"), а не возвращать коллекцию 0-й длины ( 80022c8 )
- позволить инициализировать принятие альтернативного root jQuery для мигации sake ( # 2101, 7a6931d )
- удалить ненужные тесты createHTMLDocument( +5923282 )
- передать пустую строку в createHTMLDocument для IE ( 31c7d7f )
- вернуть добавление createHTMLDocument. Спасибо, Сафари 8. ( b779831 )
- Обновить проверки jsdom, выбросить устаревшие методы обхода ( # 2153, 06f6cd1 )
- вновь ввести createHTMLDocument в parseHTML; Сафари 8 игнорируется ( cfe468f )
- Стандартизация IndexOf сравнения ( 53aa87f )
- удалить пользовательские события .ready ( # 2264, c252c5f )
- Последовательно использовать локальную ссылку на access() ( 2fb719e )
- Удалить устаревшие контекст и свойства selector ( # 1908, 0ea8c32 )
- удалить isArray-подобную проверку нод ( # 2238, 436f0ae )
- добавить поддержку элементов с тегами, разделёнными дефисом ( 534f130 )
- Использование window.setTimeout & friends вместо глобальных эквивалентов ( # 2177, 219c749 )
- удалить size() и andSelf() методы ( # 1749, f110360 )
- удалить переменную strundefined ( 29838b6 )
- Сделать jQuery объекты итерируемыми (# 1693, bb026fc )
- добавить обход для iOS ошибки JIT в isArrayLike ( # 2145, 1541664 )
- Проверить все случаи заводского использования от intro.js ( # 2181, ab40725 )
- Переход от модулей к только window.setTimeout т.д. ( 842958e )
- совместимость ветвей: удалить неиспользуемые переменные, добавить комментарии ( f6de5a9 )
- упростить тест «each» в итерациях стилей ( fcb6c4d )
- Упростить и ускорить .each ( eeda11c )
- организовать prop & attr коды похожими ( 5153b53 )
- изменить сигнатуры jQuery.each и jQuery#each ( # 2090, 2380028 )
CSS
- CSS:Event: упрощение сигнатур нативных методов ( 85577a3 )
- Fix тест «проверки вменяемости» ( “sanity check”, 995f707 )
- Удалить не-функциональный юнит-тест для отрицательного margin ( 4ab7431 )
- Добавить интеграционный тест для gh-1764 ( +8887106 )
- Удалить использование getDefaultComputedStyle ( # 15227, 274feb5 )
- Использовать предопределенные display для html и body ( a772418 )
- Fix опечатки в комментарии ( 7e09619 )
- исправить :visible/:hidden селекторы для инлайнового элемента с контентом ( # 2227, 79bcb29 )
- Поддержать relative adjustment в любом действующем блоке ( # 1711, 9b03f6d )
- элементы скрыты, когда или offsetWidth, или offsetHeight равны нулю ( # 10406 ??, # 13132, 10399dd )
- Игнорировать каскадность CSS в show()/hide()/etc ( # 1767, # 2071, 86419b1 )
- Fix тест поддержки pixelMarginRight в Android 2.3 ( cdfc2d0 )
- Очистить утечку памяти в reliableMarginRight ( # 1795, 7d15b4d )
- Не кешировать нестандартные свойства CSS ( # 2015, d471842 )
- Не именовать анонимную функцию подкачки ( 0019a46 )
- сделать getStyles() функцию более читабельной ( 3a0d582 )
- Работа по ошибкам полноэкранного режима в IE11 ( # 1764, 90d828b )
- Добавить юнит-тест для отрицательных margin и позиционирования ( 1b932bb )
- упростить «defaultDisplay» модуль ( c62486f )
- Сделать в .css(«width») & .css(«height») возврат дробных значений ( # 1724, b60b26e )
- Не показывать jQuery.swap ( # 2058, bb4d888 )
Data
- не включать в себя цифры, если camelCasing ( # 1751, 2862a07 )
- всегда camelCase ключи в .data() ( # 2257, 0e79098 )
- Использовать объект PDF вместо Java апплет для тестирования acceptData ( # 1938, 087d280 )
- camelCasing не должны игнорировать регистр ( # 2070, 172cad8 )
Deferred
- Обратно совместимые стандарты взаимодействия ( # 1722, 555a50d )
- Исправить $.when с resolved deferred and progress callbacks ( # 1894, ab20d9d )
- добавить .catch обработчик ( # 2102, 84ccf26 )
- Always handle progress callbacks before done/fail ( # 2013, # 2010, 002240a )
Размеры
Документы
- 1.x-master branch -> compat branch; 2.x branch -> master branch ( 758fd6c )
- правильная grunt команда в README.md ( # 1850, 9d6beac )
- удалить избыточную инструкции из ридми ( # 2359, 3c92770 )
- Уточнить пользовательские инструкции сборки ( a3779bc )
Эффекты
- Добавление тестов для jQuery.Animation ( b3b2d6c )
- Вновь использовать requestAnimationFrame ( # 15147, 72119e0 )
- добавить тесты для jQuery.easing._default в Animation и Tween ( 6d7ef56 )
- установить ослабление (easing) по умолчанию в jQuery.easing._default ( # 2219, 5f2ea40 )
- Добавить тесты для jQuery.Tween ( cdaed15 )
- Улучшить логику raf ( 708764f )
События
- удалить preDispatch hook и упростить «имитацию» сигнатуры ( 3655c4e )
- удалить guard для falsy обработчика аргумента jQuery#on метода ( fac67a9 )
- убрать события HTML5, наследуемые от MouseEvent ( # 2009, d7e5fce )
- Полностью очистить события в юнит-тестировании ( 4467ed6 )
- Пустые namespaces должны быть проигнорированы без происшествий ( 8653068 )
- удалить устаревшие originalEvent хаки ( 6df669f )
- Удалить поддельные originalEvent из jQuery.Event.simulate ( # 2300, 7475d5d )
- исправить ошибку неправильного окна со scrollTop/Left в фреймах ( # 1945, d21edb5 )
- удалить устаревшие псевдонимы событий ( # 2286, 0705be4 )
- Добавить примечание об ошибке MouseEnter в Chrome ( a5e1c9b )
- Восстановление `constructor` property в jQuery.Event прототипе ( # 15090, b807aed )
- Копировать свойство detail в jQuery.Event из родных событий ( # 1867, d9ed166 )
- удалить внутренний аргумент в методе .on() ( 04a2969 )
- Нормализовать свойства событий мыши в событиях drag ( # 1925, 97cf528 )
- подробно комментировать focus(in | out) & rename support prop ( c074006 )
- удалить избыточные проверки методов событий ( # 2047, a873558 )
Манипуляция (DOM)
- улучшить тест для data-URI ( dd596cc )
- добавить поддержку элементов с тегами, содержащими дефисы ( # 1987, 85ffc6d )
- удалить внутренний аргумент метода remove() ( # 2301, 349edbd )
- приватизировать функцию buildFragment() ( # 2224, a74320f )
- не вставлять tbody автоматически ( # 1835, e984d1c )
- Поддержка вставки data-URI скриптов ( # 1887, 15f4dec )
- обнаруживать скрытый инпут ReplaceWith без содержания ( # 2204, 4b27ae1 )
- Сделать точку перехвата HTML ( # 1747, 225bde3 )
- увеличить задержку data-URI test ( # 1993, 4fae911 )
- приватизировать функции внутреннего domManip() ( # 2225, 62d5579 )
- упростить HTML обертки ( # 2002, 0ea342a )
- сделать wrapAll funarg однократно выполняемым ( # 1843, 359b03c )
Offset
- удалить проверку ownerDocument в offset getter ( # 2115, 6176567 )
- Округлить значения смещения ради ошибок с плавающей точкой ( # 2147, 62ae2d0 )
- вернуть нули (zeros) для отключенных / скрытых элементов ( # 2310, 40dcc76 )
- Fix .offset(), чтобы правильно работать с ShadowDOM ( # 1784, 1617479 )
- отсчет для прокрутки при определении позиции ( # 1708, 2d71594 )
- не запускать IFRAME тест scrollTop/scrollLeft в Android 2.3 и 4.0 ( # 1981, 0c46643 )
- вернуться ранее getBoundingClientRect, чтобы избежать ошибок в IE8-11 ( 0e4477c )
- добавить тесты для скрытых элементов + прокрутки ( b041242 )
- упростить метод jQuery#offsetParent ( 74ae544 )
Selector/Sizzle
- добавить jQuery.uniqueSort; объявить устаревшим jQuery.unique() ( # 2228, e1090c3 )
- добавить тест для синонима jQuery.unique() ( add85af )
- Удалить "#"-исключение для идентификаторов токенов ( 86e62d8 )
- обновление 2.1.1 ( 7602dc7 )
Wrap
Разделы, относящиеся к организации сайта и репозитория: Readme, Build, Test, ...
Разное
- убрана поддержка старых браузеров; обновлены комментарии ( 740e190 )
- Потребность в скорости устранена в 9ad6e7e ( ff928f5 )
- Mac OS теперь OS X, благодаря правке @xfq ( d30c482 )
Секция «Readme»
- Fix пунктуации в title ( df62159 )
- Fix незначительные проблемы стиля. Благодарим MightyBranch! ( edfc94d )
- обновить Homebrew адрес сайта ( b410b15 )
- различные текстовые исправления ( 31b63fc )
- Обновите описание устаревшего модуля ( 1d75273 )
- Улучшение инструкции по сборке ( 2e9c1ea )
Build
- обновление Sizzle до 2.0.0 ( bcca4f0 )
- Обновление grunt-contrib-jshint ( 1556c46 )
- удалить bower.json lint target ( 285cfbf )
- добавить вход mailmap ( 3ec73ef )
- Обновление атрибута лицензии ( # 2331, 8e92e1e )
- падение bower; использовать npm для front-end зависимостей ( # 15186, e1949f4 )
- обновить front-end зависимости ( 8356948 )
- обновление node dependencies barring jscs ( 8e3a0ce )
- обновить grunt-jscs-checker и выполнить по новым правилам ( c869a1e )
- зависимость requirejs в 2.1.17 ( # 2290, a644101 )
- обновить source map для нового grunt jshint ( 269a27c )
- bower.json: удалить спорное поле `version` ( 61e21a4 )
- восстановить нарушенные assertions, вызванные обновлением QUnit ( 8b6aeae )
- обновление commitplease dev зависимость ( 39b7606 )
- удалить устаревшие параметры JSHint ( 34da7d5 )
- обновить authors.txt ( 8f13997 )
- Обновление до 2.0.0 ( 5bc1ddc )
- Обновление до последней QUnit (1.17.1) ( 2d5c5d2 )
- обновление версии 3.0.0-pre ( 7a607c5 )
- тест перемещения для соответствующих модулей ( fbdbb6f )
- Fix различные опечатки ( dc4b914 )
- Ускорить сборку Travis ( 31f4f8e )
- Удалить пустые define({}) с выхода сборки ( # 1768, 2c1b556 )
- Удалить npm из зависимостей ( b92acf7 )
- Обновление до grunt-bowercopy 1.0.0 ( 323e82c )
- Удаление неиспользуемых тестовых файлов Sizzle ( 8d11310 )
- исправить тесты в режиме AMD ( +6051609 )
- Переместить все внешние библиотеки во внешний каталог ( c5d9d88 )
- аккаунт для version labels in Sizzle versions ( # 1939, 78ac753 )
- обновление node dependencies ( +9101704 )
- Sizzle версии должны начинаться с тире ( d6c97ab )
- Не думайте о browser environment; smoke test on Node w/ jsdom ( # 1950, 76df9e4 )
- Удалить даты из уведомления об авторском праве ( 66e1b6b )
- Укажите действительные компоненты в коммитах сообщений ( 0c9d018 )
- игнорировать тестовые зависимости для npm install ( 35f8e15 )
- обновить Sizzle до 1.11.1 и включить лицензию ( c0b23e2 )
- обновление Sizzle ( # 2042, # 1969, 3a0dd5a )
- обновить grunt-bowercopy ( 712e78c )
- Обновление лицензии ( 4f776e5 )
- Sanctify the component name status of Wrap ( a4133ff )
- Обновление native-promise-only (снова) ( f5aa89a )
- Перестановка grunt/npm задач в build/dist/test шаблон ( bb928bd )
- Обновление native-promise-only ( 0065e1f )
- сохранить обновление sinon для последующего использования ( # 2160, 98c25b7 )
Релиз
- обновление authors.txt ( e905dcd )
- Удалить копирование jQuery-latest файлов ( c34ed46 )
- правильно установить dist remote, когда он в режиме реального релиза ( c44dd77 )
- bower.json is actually generated from scratch ( 61224f5 )
- Distribute files to distribution repo ( # 1869, # 1673, # 2045, 26eca14 )
- dist can be run during a test ( aae998b )
- нажать DIST с аналогичным пульте дистанционного управления, как проект ( 1ba45fc )
- удалить комментарий sourcemap из всех копий сжатого файла ( # 1707, a76c781 )
- исправить создание архива CDN ( # 1940, e0673df )
Поддержка
- Реорганизовать порядок браузеров, добавить Safari 8 ( 43faf6d )
- Правильные результаты тестов iOS 8, перестроить входы ( ce308e2 )
Тесты
- Обновление QUnit ( 6748ba3 )
- Незначительные обновления для QUnit 1.16 совместимости ( 26276a3 )
- Приспособить изменения страницы из QUnit HTML отчёта ( 3c13f4c )
- Увеличить QUnit тайм-аут ( ff18d8e )
- Наклон в нескольких style guide windmills ( 906caeb )
- Исправьте опечатку в регулярном выражении, соответствующей Safari 8 ( c17543f )
- Добавить результаты Microsoft Edge (от Windows 10 сборки 10130) ( 8e111df )
- Удалить Edge версию из user agent ( 5a1217e )
- Удалить test/data/ua.txt ( # 2398, e831856 )
- исправить tests in accordance with new :visible behavior ( 16713fb )
- добавить текущую версию Node и io.js в travis config ( bd9a138 )
- Развернуть CSS relative adjustment для IE ( e22ef5d )
- Fix тест по CSS relative adjustment для браузеров базовых версий ( 48be675 )
- Lower the checks rounding error ( a44cfa0 )
- сделать верх HTML suite совместимой по стилям кода ( +8356281 )
Только для jQuery 3.0
Ajax
CSS
- сэкономить 20 байт в CSS/support ( 45ec73f )
- Свернуть двойной if в один ( 7855a1a )
- Восстановить хак, чтобы получить пиксели для .css('width') и т.д. ( 3747cc6 )
Data
- срезать пару байт ( 6f65f5f )
- избегать Object.defineProperties для нод ( # 1728, 95fb798 )
- избегать не буквенно-цифровые символы в свойствах expando ( 0cdec79 )
- обновления element[expando] кеша ( 222ac3a )
- изменять кэш элемента до element[expando] ( # 1734, d702b76 )
- удалить неиспользуемый код ( 764dc94 )
- удалить Expando, когда нет никаких данных ( # 1760, 56bb677 )
- ускорить $.fn.data() для camel-cased ключа ( # 1941, 72c4a06 )
- восстановить явное удаление приватных данных в cleanData ( # 2127, 332fd94 )
- удалить тесты, основанные на апплетах ( # 1938, 95c0a10 )
Манипуляция
- Приспособить XMLNode host object input для getAll ( # 15151, 1ae025e )
- Проверить потерю состояния, если имя задано для Android 4.0-4.3 ( 1bbb678 )
Offset
- Упрощение в if ( +4287442 )
- не запускать IFRAME тест scrollTop/scrollLeft в мобильном Safari ( 4ab8603 )
Разделы, относящиеся к организации сайта и репозитория: Документы, Readme, Build, Tests
Разное
- Подправить комментарии и документы, удаляя IE и прочее. Обновить все ссылки на bugs.jquery.com ( # 1681, 3e89a53 )
- Удалить остатки -moz-BOX-размеров в тестах ( e81b258 )
Документы
- Добавить информацию о Sizzle обо всём, что не исключено в ветке Compat ( # 2184, 062b526 )
- Fix прописные в README ( b50e0f2 )
Секция «Readme»
- Добавить selector-native.js ссылку. Благодарности randsonjs! ( cfe2eae )
Build
- использовать различные версии jsdom для Node и io.js тестирования ( # 2266, 5c3101f )
- Рефакторинг Node smoke tests ( 9c8a3ec )
- Перемещены JSHint директивы в файл .jshintrc ( 15a609f )
Тесты
- Удалить последнюю запятую для совместимости с веткой Compat ( dc8ba6a )
Только jQuery Compat 3.0
Ajax
- Добавить комментарий поддержки и исправить проблему кода стиля ( e38a94a )
- Запустить патч-тест только в IE8 на TestSwarm ( # 1994, 2524da0 )
- переместить пояснительный комментарий к соответствующему месту ( 04fc801 )
- Использовать родной XHR для всех нелокальных запросов в IE9+ ( # 1684, 61f812b )
- Переименовать Spartan в Edge в комментарии ( 8d88cd5 )
- исправить запасную логику XHR для IE8 ( bd699cb )
Атрибуты
- Использовать проверку typeof для метода getAttribute() ( 075da30 )
- не проверять манипуляции с CSS-классом для SVG в IE8 ( 57fb2dc )
- исправить проблемы с IE8 ( f2bcf87 )
Обратные вызовы
- Изменить сломанный URL для одного обходного пути ( e4cbc97 )
Ядро
- Совместить код в intro.js в мастере ( fe2a584 )
CSS
- Добавить тест для хака .css('marginRight') и подобных ( 25bc680 )
- Fix альфа-прозрачностьв верхнем регистре в IE8 ( # 1705, c5e8e12 )
- упростить хак CSS getter для вычисляемых значений ( dac716c )
- исправить порядок зависимостей для AMD ( e185aa3 )
Data
Deferred
- пройти lint в новых catch-тестах ( 203979d )
Эффекты
- Удалить ненужные операции в тестах ( 13040b6 )
- исправить ошибки тестов в IE8 ( fe6afa8 )
- Fix тесты ( 29561bc )
События
Манипуляция DOM
- не проверять data-URI элемента script в IE8 ( 503e545 )
- утечка памяти в IE8 в обнаружении noCloneEvent ( # 1840, faf295a )
- Обновить элементы html5shiv ( # 15241, a953389 )
- не запускать тесты IE8 для тегов с дефисами ( 87bb713 )
Offset
- разрешить сеттер offset для элементов, отключенных от DOM ( # 2114, dc49f62 )
- getBounding не возвращает ширину/высоту в IE8. Исправить тест. ( 3b1de11 )
- исправить тест IFRAME scrollTop/Left для IE8 ( d632699 )
- исправить тест IFRAME scrollTop/Left для iPhone ( 62a333e )
- вернуть jQuery.contains для в IE8 (ветка Compat) ( 6df3990 )
- нет необходимости проверять ownerDocument ( 523de77 )
Traversing
- упростить метод jQuery#contents ( 7230df1 )
Разделы, относящиеся к организации сайта и репозитория: Документы, Build, Тесты
Документы
- Переименовать 1.x в Compat ( 8992ac8 )
Build
- Указывать на файлы в вветке Compat, а не master ( b7663ea )
- указать «jQuery Compat» в баннерах собранных файлов ( 8cd6875 )
- 1.x-master -> Compat ( 2912ddd )
- Добавить файл «timers_ie.js» снова в репо ( 31e6697 )
- добавить "+Compat" в теги версии и jQuery.fn.jquery ( # 2269, d18b645 )
- Поправить проблему по отступам (indent) ( d0f27a7 )
Разное
Тесты
- Восстановить обработку для IE8 (Sinon таймеры для IE и HTML5 Shiv) ( 0b07c65 )
Комментарии (6)
enepomnyaschih
17.07.2015 12:48+1Наконец-то show и hide можно будет использовать без последствий для производительности. Я уже взял за привычку писать css('display', 'none') и css('display', '').
nazarpc
Если кому-то интересно — сколько нибудь сложный плагин сломается с 99% в нескольких местах (не шутка, а опыт).
К примеру, в UIkit сломана половина функциональности. Часть можно достаточно быстро исправить, часть нужно долго дебажить.
Посему рекомендую начать как можно раньше.
По сути, всё стало строже, так что при совместимости с 3.0 код скорее всего будет обратно совместимо с предыдущими версиями, и это хорошо.