Только что был выпущен jQuery 3.4.0. Это последний второстепенный выпуск в ветке 3.x, и в рамках подготовки к удалению механизма выбора Sizzle из следующего основного выпуска, jQuery 4.0, он осуждает нестандартные позиционные селекторы Sizzle.
Мы не рассматривали jQuery 3.3.0, который был быстро заменен на 3.3.1, когда он был выпущен более года назад на том основании, что это был второстепенный выпуск, который в основном представлял собой устаревание функций, которые перестали быть полезными. он включал только одну новую функцию — методы .addClass (), .removeClass () и .toggleClass () принимают массив классов. Однако стоит рассказать об устаревших версиях jQuery 3.4.0, поскольку они готовятся к более серьезным изменениям, когда появится jQuery 4.
Тимми Уиллисон, руководитель группы jQuery Core, напоминает нам в своем сообщении в блоге о jQuery 3.4:
Базовый API jQuery — выбрать что-то, а затем что-то сделать с тем, что было выбрано. Sizzle, механизм выбора в jQuery, обрабатывает первую половину. Это был быстрый и эффективный небольшой движок, проложивший путь для собственных API-интерфейсов селекторов, таких как querySelectorAll, и дополнительных селекторов JavaScript и CSS.
Первоначально являясь частью jQuery, Sizzle оказал более широкое влияние, и его селекторы проникли в современные браузеры, что сделало их избыточными в jQuery, поэтому было принято решение удалить Sizzle в jQuery 4.0.
Чтобы подготовить почву для этого изменения, в котором Sizzle будет заменен небольшой оболочкой вокруг querySelectorAll, устарел следующий список нестандартных позиционных селекторов, которые было бы почти невозможно повторно реализовать без большего механизма выбора:
: first: last: eq: even: odd: lt: gt: nth
Отмечая, что позиционные методы, такие как:
.first.last .eq
будет по-прежнему поддерживаться, — говорит Уиллисон, и я должен с ним согласиться:
Все, что вы можете делать с позиционными селекторами, вы можете делать с позиционными методами. В любом случае они работают лучше.
С другой стороны, если вам необходимо поддерживать устаревший браузер, такой как IE, Internet Explorer, вам может потребоваться продолжить использование Sizzle, либо используя версию jQuery до 4.0, дата которой еще не объявлена. , или загрузив сам Sizzle.
Одно из других изменений в jQuery 3.4.0 касается проблемы обработки событий, ожидаемого состояния, которое было исправлено с помощью флажков, но случайно пропущено радиовходы. Теперь, когда элемент щелкает и регистрируется значение true, свойство checked обновляется перед выполнением обработчика событий, как в этом примере:
var $ radios = jQuery («. пример»); var $ firstRadio = $ radios.first (); var firstCheckedState = $ firstRadio.prop («проверено»); $ radio.on («click», function () {// true в <3.4.0 console.log ($ firstRadio.prop ("checked") === firstCheckedState);}); $ radios.eq (1) .click (); Другое исправление касается уязвимости Prototype Pollution, которая вызвала непредвиденное поведение при использовании: jQuery.extend (истина, {}, ...) До сих пор, если неанитизированный исходный объект содержал перечислимое свойство __proto__, он мог расширять собственный Object.prototype: jQuery.extend (true, {}, JSON.parse ('{"__ proto__": {"test": true}}')); console.log ("тест" в {}); // правда Помимо включения исправления в этот выпуск исправлений, Даниэль Руф сделал доступными различия для предыдущих версий на GitHub. Однако Уиллисон предупреждает: Обратите внимание: в то время как jQuery делает все возможное, чтобы защитить пользователей от уязвимостей безопасности, jQuery - это библиотека управления DOM, которая обычно будет делать то, что вы ей говорите. В этом случае поведение, вероятно, было неожиданным, поэтому jQuery.extend больше не будет записывать какие-либо свойства с именем __proto__. Но такие средства защиты, как этот, не заменяют хорошие методы обеспечения безопасности, такие как дезинфекция пользовательского ввода. Также в новом выпуске улучшена производительность в .width и .height, чтобы избежать сбоев макета при получении и установке размеров. Это исправлено во всех браузерах, кроме IE. Наконец, что касается добавления элементов скрипта с помощью таких методов, как .html и .append, была добавлена поддержка ранее игнорировавшихся атрибутов nonce и nomodule. jQuery 3.4 теперь зависает от них для загрузки и выполнения удаленного контента, на который они ссылаются. В целом это кажется стоящим незначительным обновлением, оставляющим эту ветку в хорошем состоянии и позволяющим сообществу перейти к jQuery 4. А также стандартную версию jQuery 3.4.0, которую можно получить из jQuery CDN или напрямую: https://code.jquery.com/jquery-3.4.0.js https://code.jquery.com/jquery-3.4.0.min.js есть "тонкая" версия, которая исключает модули ajax и эффектов, экономя около 6 КБ заархивированных байтов: https://code.jquery.com/jquery-3.4.0.slim.js https://code.jquery.com/jquery-3.4.0.slim.min.js Хотя многие считают, что вам больше не нужен jQuery, это просто отражение того, как мало человек, отстаивающий эту точку зрения, знает о jQuery. Дело не только в селекторах. Это по-прежнему стандартная библиотека JavaScript и урок написания хорошего JavaScript для всех нас. Ян Эллиот является автором книг Just jQuery: The Core UI и Just jQuery: Events, Async & AJAX, которые являются частью библиотеки I Programmer Library, опубликованной I / O Press.