JQuery
jQuery — библиотека для JavaScript, предназначенная для упрощения обхода и манипулирования деревом HTML, а также обработки событий, анимации CSS и поддержки Ajax[1]. Является свободным, открытым ПО под разрешительной лицензией MIT[2]. По состоянию на август 2022 года, jQuery используется на 77 % из 10 миллионов самых популярных сайтов[3]. Согласно анализу, jQuery — самая широко распространённая JS-библиотека, используемая в 3-4 раза чаще других подобных библиотек[3].[4]
Синтаксис jQuery создан для упрощённого навигирования по документу, поиска и изменения элементов DOM, создания анимаций, обработки событий и разработки Ajax-приложений. jQuery также предоставляет возможности для создания подключаемых модулей (плагинов), что позволяет разработчикам реализовывать абстракции для низкоуровневого взаимодействия, анимаций, сложных эффектов и высокоуровневых темизируемых виджетов. Модульный подход к архитектуре jQuery позволяет создавать мощные динамические веб-страницы и приложения.
Набор основных возможностей jQuery — выборка, обход и изменение DOM-элементов средствами специального селекторного движка (Sizzle, с версии 1.3) — сформировал характерный «стиль программирования», сочетающий алгоритмы и структуры данных DOM. Это повлияло на архитектуру других JavaScript-фреймворков, таких как YUI v3 и Dojo, а также стимулировало создание стандарта Selectors API[5].
Microsoft и Nokia включали jQuery в свои платформы[6]. Microsoft добавляла jQuery в поставку Visual Studio[7], для использования в ASP.NET AJAX и ASP.NET MVC, а Nokia интегрировала её в Web Run-Time для разработки виджетов[8].
Общие сведения
| jQuery | |
|---|---|
| Тип | JavaScript-библиотека |
| Автор | Джон Резиг |
| Разработчик | Команда jQuery |
| Написана на | JavaScript |
| Операционная система | кроссплатформенность |
| Первый выпуск | 26 августа 2006 |
| Последняя версия | 4.0.0-rc.1 (11 августа 2025) |
| Репозиторий | github.com/jquery/jquery |
| Лицензия | MIT |
| Сайт | jquery.com |
Обзор
jQuery в своей основе — библиотека для работы с DOM. DOM представляет собой древовидную структуру описания всех элементов веб-страницы. jQuery упрощает синтаксис поиска, выбора и изменения этих элементов. Например, с помощью jQuery можно найти элемент с определённым свойством (например, все элементы h1), изменить их атрибуты (цвет, видимость) или обработать событие, например клик мыши.
В jQuery реализован особый подход к обработке событий, выходящий за рамки базовой манипуляции DOM-элементами. Назначение события и определение обработчика производится единым способом, в одном месте кода. Также предоставляются простые средства для создания анимаций (например, плавное появление/затухание элементов при их показе или скрытии) и манипулирования свойствами CSS.
Основные принципы разработки с использованием jQuery:
- Разделение JavaScript и HTML: jQuery поощряет отделение JS-кода от разметки HTML.
- Краткость и наглядность: поддерживаются «цепочки» вызовов, сокращённые имена методов.
- Устранение проблем кроссбраузерности: jQuery выравнивает особенности JS-движков разных браузеров, обеспечивая единую точку входа.
- Расширяемость: добавление новых событий, элементов и методов возможно в виде подключаемых плагинов.
История
jQuery была создана в январе 2006 года на BarCamp NYC Джоном Резигом, под влиянием библиотеки cssQuery Дина Эдвардса[9].[10] В настоящее время поддерживается командой разработчиков под руководством Тимми Виллисона, а развитием селекторного движка Sizzle руководит Ричард Гибсон[11].
Изначально проект лицензировался под CC BY-SA 2.5, в 2006 году переключён на MIT[12]. В конце 2006 года проект стал распространяться по двойной лицензии MIT и GPL[13], однако из-за путаницы с 2012 года используется только MIT[14].
Популярность
- В 2015 году jQuery использовалась на 62,7 % из миллиона крупнейших сайтов (по BuiltWith), и на 17 % сайтов всего интернета[15].
- В 2017 году — на 69,2 % из топ-1 млн сайтов (по Libscore)[4].
- В 2018 году — на 78 % сайтов из топ-1 млн[16].
- В 2019 году jQuery была на 80 % сайтов из топ-1 млн (BuiltWith)[16], и на 74,1 % из топ-10 млн (W3Techs)[3].
- В 2021 году — на 77,8 % сайтов из топ-10 млн (W3Techs)[17].
Возможности
jQuery включает в себя:
- выделение элементов DOM благодаря открытому мультибраузерному движку Sizzle[18]
- манипуляции DOM на основе CSS-селекторов (по имени, атрибутам, id и классам)
- обработку событий
- эффекты и анимацию
- работу с Ajax
- объекты Promise и Deferred для работы с асинхронным кодом
- разбор JSON
- расширяемость (подключение плагинов)
- утилиты (например, обнаружение возможностей браузера)
- методы совместимости для старых браузеров (например,
jQuery.inArray()иjQuery.each()) - кроссбраузерную поддержку
Платформы и совместимость
Библиотека jQuery распространяется в виде одного файла JavaScript, содержащего все интерфейсы (DOM, события, Ajax и др). Она может быть подключена локально либо через публичные CDN. Официальный CDN размещён на MaxCDN[20], сервисы Google Hosted Libraries и Microsoft также предоставляют свои копии[21].[22]
Технические особенности
Архитектура и функции
jQuery предоставляет два вида функций: статические утилиты и методы объектов jQuery. Все они доступны через основной идентификатор jQuery (или его псевдоним $)[23].
Метод jQuery() создаёт объект, представляющий набор DOM-узлов, к которым можно применять цепочки методов (методы возвращают новый jQuery-объект). Поиск осуществляется CSS-селекторами, например: $("div.test") возвращает все div с классом test.
Статические утилиты (например, $.ajax()) не привязываются к объекту jQuery, а вызываются напрямую.
Режим no-conflict
Для избежания конфликтов переменных (например, если другая библиотека использует $) предусмотрена функция $.noConflict(), возвращающая управление другим скриптам[24].
Типовое использование
Инициализирующий код и обработчики событий обычно размещаются в $(handler), который срабатывает после полной загрузки DOM. Идиома $(document).ready(callback) постепенно замещается более краткой формой начиная с jQuery 3.0[25].
Цепочки вызовов
Методы объектов jQuery возвращают сам объект, позволяя формировать цепочки вызовов, например:
$('div.test')
.on('click', handleTestClick)
.addClass('foo');
Некоторые методы, возвращающие значения (например, val()), не поддерживают цепочки.
Создание новых DOM-элементов
jQuery позволяет создавать DOM-элементы непосредственно из HTML-строк и вставлять их в документ.
Ajax
Запросы Ajax осуществляются с помощью $.ajax(). Пример POST-запроса и обработки результата:
$.ajax({
type: 'POST',
url: '/process/submit.php',
data: {
name : 'John',
location : 'Boston',
},
}).then(function(msg) {
alert('Data Saved: ' + msg);
}).catch(function(xmlHttpRequest, statusText, errorThrown) {
alert(
'Your form submission failed.\n\n'
+ 'XML Http Request: ' + JSON.stringify(xmlHttpRequest)
+ ',\nStatus Text: ' + statusText
+ ',\nError Thrown: ' + errorThrown);
});
Интеграции и экосистема
Плагины jQuery
Архитектура jQuery допускает создание тысяч плагинов, расширяющих функциональность: помощники Ajax, работа со сторонними сервисами, динамические таблицы, списки, XML/XSLT, drag&drop, cookies, модальные окна и др[26]. Крупнейший каталог плагинов размещён по адресу plugins.jquery.com[26], однако его исходная версия была удалена в декабре 2011 года, и теперь используется репозиторий на GitHub[27].[28] Для изучения JavaScript и самостоятельной разработки плагинов предусмотрен раздел «Learning Center»[29].
Для автоматического преобразования кода jQuery в чистый JavaScript существуют специальные инструменты, например jQuery to JavaScript Converter[30].
Выпуски
| Версия | Дата первого выпуска | Последнее обновление | Минифицированный размер (КБ) | Примечания | Источник |
|---|---|---|---|---|---|
| 1.0 | 26 августа 2006 | Первый стабильный выпуск | |||
| 1.1 | 14 января 2007 | ||||
| 1.2 | 10 сентября 2007 | 1.2.6 | 54.5 | ||
| 1.3 | 14 января 2009 | 1.3.2 | 55.9 | В ядро внедрён селекторный движок Sizzle | |
| 1.4 | 14 января 2010 | 1.4.4 | 76.7 | ||
| 1.5 | 31 января 2011 | 1.5.2 | 83.9 | Управление Deferred callbacks, переписан модуль ajax | |
| 1.6 | 3 мая 2011 | 1.6.4 (12 сентября 2011) | 89.5 | Значительно ускорены attr() и val() | [31] |
| 1.7 | 3 ноября 2011 | 1.7.2 (21 марта 2012) | 92.6 | Новые Event API: .on() и .off() | [32] |
| 1.8 | 9 августа 2012 | 1.8.3 (13 ноября 2012) | 91.4 | Переработан Sizzle, улучшена анимация и $(html, props) | [33] |
| 1.9 | 15 января 2013 | 1.9.1 (4 февраля 2013) | 90.5 | Удалены устаревшие интерфейсы, рефакторинг | [34] |
| 1.10 | 24 мая 2013 | 1.10.2 (3 июля 2013) | 90.9 | Исправлены ошибки как в 1.9, так и 2.0 бета | [35] |
| 1.11 | 24 января 2014 | 1.11.3 (28 апреля 2015) | 93.7 | [36] | |
| 1.12 | 8 января 2016 | 1.12.4 (20 мая 2016) | 94.9 | [37] | |
| 2.0 | 18 апреля 2013 | 2.0.3 (3 июля 2013) | 81.7 | Отказ от поддержки IE 6-8 ради производительности и размера | |
| 2.1 | 24 января 2014 | 2.1.4 (28 апреля 2015) | 82.4 | ||
| 2.2 | 8 января 2016 | 2.2.4 (20 мая 2016) | 83.6 | ||
| 3.0 | 9 июня 2016 | 3.0.0 (9 июня 2016) | 84.3 | Promises/A+ для Deferreds, $.ajax и $.when, .data() совместим с HTML5 | [38] |
| 3.1 | 7 июля 2016 | 3.1.1 (23 сентября 2016) | 84.7 | Добавлен jQuery.readyException, ошибки ready теперь не поглощаются | |
| 3.2 | 16 марта 2017 | 3.2.1 (20 марта 2017) | 84.6 | Поддержка <template>, объявлены устаревшими старые методы |
[39] |
| 3.3 | 19 января 2018 | 3.3.1 (20 января 2018) | 84.9 | Устаревшие функции, поддержка классов в виде массива | [40][41] |
| 3.4 | 10 апреля 2019 | 3.4.1 (1 мая 2019) | 86.1 | Оптимизация, поддержка nonce и nomodule, исправления для radio, минорное исправление безопасности |
[42][43] |
| 3.5 | 10 апреля 2020 | 3.5.1 (4 мая 2020) | 87.4 | Исправления безопасности, .even() & .odd(), депрецирован jQuery.trim | [44][45] |
| 3.6 | 2 марта 2021 | 3.6.4 (8 марта 2023) | 88.2 | Исправления ошибок, возврат JSON при ошибке JSONP, поддержка новых селекторов Chrome | [46][47][48] |
| 3.7 | 11 мая 2023 | 3.7.1 (28 августа 2023) | 85.4 | .uniqueSort(), повышение производительности, улучшения работы .outerWidth(true)/.outerHeight(true), исправления работы с фокусом | [49][50][51] |
| 4.0 | 11 августа 2025 | 4.0.0-rc.1 (11 августа 2025) | 78.8 | Поддержка IE11 убрана, удалены устаревшие API, поддержка FormData, переход к ES-модулям | [52] |
Тестирование
Альтернативы jQuery
Поскольку проблема кроссбраузерности для современных браузеров практически утрачена, большинство возможностей jQuery могут быть реализованы на стандартном JavaScript, без ощутимых потерь в удобстве[56]. В частности, GitHub в 2018 году полностью отказался от использования jQuery на своих страницах[57].
Примечания
- ↑ jQuery: The write less, do more, JavaScript library. The jQuery Project. Дата обращения: 29 апреля 2010.
- ↑ jQuery Project License. jQuery Foundation. Дата обращения: 11 марта 2017. Архивировано 15 февраля 2015 года.
- ↑ 1 2 3 Usage of JavaScript libraries for websites (амер. англ.). W3Techs. — «jQuery (74.1%) is 3.7 times more popular than Bootstrap (19.9%).» Дата обращения: 15 ноября 2019. Архивировано 15 ноября 2019 года.
- ↑ 1 2 Libscore. — «Top scripts are 1. jQuery (692,981 sites); 2. jQuery UI (193,680 sites); 3. Facebook SDK (175,369 sites); 4. Twitter Bootstrap JS (158,288 sites); 5. Modernizr (155,503 sites).» Дата обращения: 11 февраля 2017. Архивировано 19 февраля 2017 года.
- ↑ «Selectors API Level 1, W3C Recommendation» (21 февраля 2013). Широкое распространение jQuery стало фактором ускоренного внедрения нативных методов
querySelector/querySelectorAllв веб-браузерах. - ↑ Resig, John jQuery, Microsoft, и Nokia. jQuery Blog. jQuery (28 сентября 2008). Дата обращения: 29 января 2009. Архивировано 29 сентября 2008 года.
- ↑ Guthrie, Scott jQuery and Microsoft. ScottGu's Blog (28 сентября 2008). Дата обращения: 15 апреля 2019. Архивировано 10 июля 2014 года.
- ↑ Guarana UI: A jQuery Based UI Library for Nokia WRT. Forum Nokia. Дата обращения: 30 марта 2010. Архивировано 16 августа 2011 года.
- ↑ Йорк, Ричард. Beginning JavaScript and CSS Development with jQuery. — Wiley, 2009. — P. 28. — ISBN 978-0-470-22779-4.
- ↑ Resig, John History of jQuery (31 октября 2007). Дата обращения: 15 апреля 2019. Архивировано 6 апреля 2023 года.
- ↑ The jQuery Team (амер. англ.). jquery.com. JS Foundation. — «Team: Timmy Willison (jQuery Core Lead), Richard Gibson (Sizzle Lead, jQuery Core).» Дата обращения: 22 мая 2019. Архивировано 1 марта 2010 года.
- ↑ jquery-under-the-mit-license на jquery.org (2006)
- ↑ license на jquery.org (архив 2010)
- ↑ jQuery Licensing Changes (англ.). jQuery Blog (10 сентября 2012). Архивировано 9 сентября 2025 года.
- ↑ Handling 15,000 requests per second: The Growth Behind jQuery (амер. англ.). www.maxcdn.com. MaxCDN (20 июня 2015). Дата обращения: 2 июля 2018. Архивировано 2 июля 2018 года.
- ↑ 1 2 jQuery Usage Statistics (Dec 2019) (англ.). trends.builtwith.com (31 декабря 2019). Дата обращения: 21 февраля 2020. Архивировано 21 февраля 2020 года.
- ↑ Usage Statistics and Market Share of JavaScript Libraries (February 2020). W3Techs (21 февраля 2020). Дата обращения: 21 февраля 2020. Архивировано 21 февраля 2020 года.
- ↑ Resig, John jQuery 1.3 and the jQuery Foundation. jQuery Blog (14 января 2009). Дата обращения: 4 мая 2009. Архивировано 11 августа 2025 года.
- ↑ Browser Support | jQuery
- ↑ jquery.org, jQuery Foundation - jQuery CDN.
- ↑ Google Libraries API - Developer's Guide. Дата обращения: 11 марта 2012.
- ↑ Microsoft Ajax Content Delivery Network. ASP.net. Microsoft Corporation. Дата обращения: 15 апреля 2019. Архивировано 7 февраля 2017 года.
- ↑ js.foundation, JS Foundation - jQuery() (амер. англ.). api.jquery.com. Дата обращения: 2 июля 2018. Архивировано 19 января 2010 года.
- ↑ jQuery.noConflict() jQuery API Documentation. Архивировано 4 октября 2025 года.
- ↑ jquery.org, jQuery Foundation - jQuery Core 3.0 Upgrade Guide - jQuery. Архивировано 11 октября 2025 года.
- ↑ 1 2 Plugins. The jQuery Project. Дата обращения: 15 апреля 2019.
- ↑ What Is Happening To The jQuery Plugins Site? jQuery Blog. Дата обращения: 22 апреля 2015. Архивировано 8 мая 2025 года.
- ↑ jquery/plugins.jquery.com. GitHub. Дата обращения: 22 апреля 2015. Архивировано 5 сентября 2013 года.
- ↑ jQuery Learning Center. jQuery Foundation. Дата обращения: 2 июля 2014.
- ↑ jQuery to JavaScript Converter. CodeNTools. Дата обращения: 28 июля 2025.
- ↑ jQuery 1.6.4 Released. jQuery Blog (12 сентября 2011). Архивировано 7 июня 2025 года.
- ↑ jQuery 1.7.2 Released. jQuery Blog (21 марта 2012). Архивировано 14 июня 2025 года.
- ↑ jQuery 1.8.3 Released. jQuery Blog (13 ноября 2012). Архивировано 11 октября 2025 года.
- ↑ jQuery 1.9.1 Released. jQuery Blog (4 февраля 2013). Архивировано 2 марта 2013 года.
- ↑ jQuery 1.10.2 and 2.0.3 Released. jQuery Blog (3 июля 2013). Архивировано 7 июня 2025 года.
- ↑ jQuery 1.11.3 and 2.1.4 Released – iOS Fail-Safe Edition. jQuery Blog (28 апреля 2015). Архивировано 1 мая 2015 года.
- ↑ jQuery 1.12.4 and 2.2.4 Released. jQuery Blog (20 мая 2016). Архивировано 11 августа 2025 года.
- ↑ Chesters, James Long-awaited jQuery 3.0 Brings Slim Build. infoq.com (15 июня 2016). Дата обращения: 28 января 2017. Архивировано 1 апреля 2025 года.
- ↑ jQuery 3.2.0 Is Out! jQuery Blog (16 марта 2017). Дата обращения: 12 марта 2018. Архивировано 5 сентября 2025 года.
- ↑ jQuery 3.3.0 – A fragrant bouquet of deprecations and…is that a new feature? jQuery Blog (19 января 2018). Дата обращения: 15 апреля 2019. Архивировано 9 сентября 2025 года.
- ↑ jQuery 3.3.1 – fixed dependencies in release tag. jQuery Blog (20 января 2018). Дата обращения: 15 апреля 2019. Архивировано 9 сентября 2025 года.
- ↑ jQuery 3.4.0 Released. jQuery Blog (10 апреля 2019). Дата обращения: 15 апреля 2019. Архивировано 11 октября 2025 года.
- ↑ jQuery 3.4.1: triggering focus events in IE and finding root elements in iOS 10. jQuery Blog. jQuery Foundation. Архивировано 3 августа 2025 года.
- ↑ jQuery 3.5.0 Released! jQuery Blog (10 апреля 2020). Дата обращения: 11 апреля 2020. Архивировано 20 сентября 2025 года.
- ↑ jQuery 3.5.1 Released: Fixing a Regression. jQuery Blog. jQuery Foundation. Архивировано 1 сентября 2025 года.
- ↑ jquery.org, jQuery Foundation- jQuery 3.6.0 Released! (амер. англ.). Дата обращения: 27 марта 2021. Архивировано 2 марта 2021 года.
- ↑ jQuery 3.6.4 Released: Selector Forgiveness (амер. англ.). Дата обращения: 8 марта 2023. Архивировано 8 сентября 2025 года.
- ↑ jquery v3.6.4 (англ.). bundlephobia.com. Дата обращения: 8 марта 2023. Архивировано 24 января 2025 года.
- ↑ jquery.org, jQuery Foundation- jQuery 3.7.0 Released: Staying in Order (амер. англ.). Архивировано 8 сентября 2025 года.
- ↑ jQuery 3.7.1 Released: Reliable Table Row Dimensions (амер. англ.). Дата обращения: 14 сентября 2023. Архивировано 8 сентября 2025 года.
- ↑ jquery v3.7.0 (англ.). bundlephobia.com. Дата обращения: 11 мая 2023. Архивировано 14 января 2025 года.
- ↑ jquery.org, jQuery Foundation- jQuery 4.0.0 Release Candidate 1 (амер. англ.). Архивировано 11 августа 2025 года.
- ↑ History. qunitjs.com. Дата обращения: 15 апреля 2019. Архивировано 12 октября 2025 года.
- ↑ jquerytesting [licensed for non-commercial use only] / FrontPage. jquerytesting.pbworks.com. Архивировано 9 августа 2025 года.
- ↑ Krill, Paul 3 JavaScript libraries to replace jQuery. InfoWorld (8 мая 2019). Архивировано 30 мая 2023 года.
- ↑ You Might Not Need jQuery. youmightnotneedjquery.com. Дата обращения: 23 апреля 2022.
- ↑ Removing jQuery from GitHub.com frontend (амер. англ.). The GitHub Blog (6 сентября 2018). Дата обращения: 21 июля 2021. Архивировано 15 марта 2019 года.