Автор статьи относительно недавно перестал использовать jQuery и после этого ему часто приходилось гуглить различные шаблоны кода для решения повседневных задач. Чтобы сэкономить время, он создал это практическое справочное руководство с некоторыми из наиболее распространенных шаблонов jQuery и их эквивалентами в JavaScript.
Мы расскажем, как перейти к обычному JavaScript, основываясь на этих концепциях и функциях:
- Выборка элементов
- События
- Использование css()
- Окончание загрузки документа
- CSS-классы
- ajax()
- Создание элементов
- HTML и текст
Примечание mattweb: в примерах кода, представленных в статье используются стрелочные функции. Ознакомиться с ними можно здесь
Выборка элементов
Выбор одного или нескольких элементов DOM для чего-либо является одной из основных задач jQuery. Эквивалентом $() или jQuery() в JavaScript являются querySelector() или querySelectorAll(), которые так же как и в jQuery вы можете вызывать с CSS-селектором в качестве аргумента.
JavaScript
Запуск функций над всеми выбранными элементами
querySelectorAll() возвращает объект NodeList, который состоит из всех элементов, удовлетворяющих условию выборки. Обращаем внимание, что в jQuery вы можете применить функцию для всего набора элементов, просто вызвав метод объекта jQuery, в обычном (vanilla) JavaScript вам придется перебирать элементы коллекции NodeList, используя NodeList.forEach().
JavaScript
Находим один элемент внутри другого
Распространенный шаблон jQuery - это выбор одного элемента внутри другого элемента с помощью метода .find(). Вы можете достичь того же эффекта, выбрав дочерние элементы, вызывая querySelector или querySelectorAll над родительским элементом.
JavaScript
Обход дерева с parent(), next() и prev()
Если вы желаете обойти DOM, чтобы выбрать родительский элемент или сестринские элементы текущего элемента, вы можете использовать nextElementSibling, previousElementSibling и parentElement над текущим элементом.
JavaScript
Работа с событиями
Существует множество способов прослушивания событий в jQuery, но используете ли вы .on(), .bind(), .live() или .click(), вам будет достаточно JavaScript-эквивалента .addEventListener():
JavaScript
Обработка событий для динамически добавленных элементов
jQuery’s метод .on() позволяет вам работать с «живыми» обработчиками событий, где вы обрабатываете события на объектах, которые динамически добавляются в DOM. Чтобы сделать что-то подобное без jQuery, вы можете «прикрепить» обработчик событий к элементу при добавлении его в DOM:
JavaScript
Создание и обработка событий
Эквивалент ручного запуска событий с помощью trigger() можно получить, вызвав dispatchEvent(). Метод dispatchEvent() может быть вызван для любого элемента и принимает объект Event (событие) в качестве первого аргумента.
JavaScript
Стилизация элементов
Если вы вызываете jQuery метод .css() для элемента, чтобы изменить его встроенный CSS с помощью jQuery, вы используете .style в JavaScript и присваиваете значения его различным свойствам для достижения того же эффекта:
JavaScript
С помощью jQuery вы можете передать объект с парами ключ-значение для стилизации нескольких свойств за раз. В JavaScript вы можете установить значения по одному или задать все правила в одну строку:
JavaScript
Методы .hide() и .show()
.hide() и .show() - удобные методы, они эквивалентны доступу к свойству .style и установка его значения display равным none или block.
JavaScript
Готовность загрузки документа
Если вам нужно дождаться полной загрузки DOM, например, для создания обработчиков события у объектов DOM, в jQuery вы обычно используете $(document).ready() или обычное сокращение $().Мы можем легко создать аналогичную функцию, чтобы заменить ее DOMContentLoaded:
JavaScript
Работаем с классами
Вы можете с легкостью получить доступ и работать с классами через свойство classList переключать, замещать, добавлять и удалять классы:
JavaScript
Если вы хотите удалить или добавить несколько классов, вы можете просто передать несколько аргументов .add() и .remove():
JavaScript
Если вы переключаете два класса, которые являются взаимоисключающими, вы можете получить доступ к свойству classList и вызвать .replace(), чтобы заменить один класс другим:
JavaScript
Проверяем есть ли у элемента определенный класс.
Если вы хотите запускать функцию только в зависимости от того, есть ли у элемента определенный класс, вы можете заменить .hasClass() в jQuery на classList.contains():
JavaScript
Сетевые запросы с помощью .get() или .ajax()
Метод fetch() позволяет создавать сетевые запросы аналогично методам jQuery ajax() и get(). Метод fetch() принимает URL в качестве аргумента, и возвращает объект Promise, который вы можете использовать для обработки ответа:
JavaScript
Создание элементов
Если вы хотите динамически создать элемент в JavaScript и добавить его в DOM, вы можете вызвать метод createElement() объекта document и передать ему имя тега, чтобы указать какой элемент вы хотите создать:
JavaScript
Если вы желаете наполнить эти элементы контентом, вы можете просто указать его в свойстве textContent, или создать текстовый элемент с помощью createTextNode и вставить его в элемент DOM:
JavaScript
Если вы хотите изменить текст элемента или добавить новые элементы в DOM, скорее всего, вам нужно использовать innerHTML(), но его использование может подвергнуть вас атакам межсайтового скриптинга (XSS). Хотя вы можете обойти это и очистить HTML, есть более безопасные альтернативы.
Если вы хотите только прочитать или обновить текст элемента, вы можете использовать свойство textContent текущего объекта, чтобы получить текст, или обновить его:
JavaScript
Если вы создаете новый элемент, вы можете добавить этот элемент в другой элемент, используя метод родительского appendChild():
JavaScript
Соберем вместе код, который создаёт div, обновляет его текст и класс и добавляет его в DOM:
JavaScript
Итоги
Ни в коем случае эта статья не является исчерпывающим руководством по любому из методов JavaScript, описываемых в ней, но я надеюсь, что это было бы полезным руководством по переходу от jQuery к JavaScript.
Перечислим методы, рассмотренные в статье:
- Выбор элементов с помощью querySelector и querySelectorAll
- Обработка событий с помощью addEventListener
- Обновление CSS-стилей через свойства style
- Работа с классами через свойство classList
- AJAX-запросы с помощью fetch
- Создание событий с помощью dispatchEvent
- Создание элементов методом createElement
- Обновление текста через свойство textContent
- Добавление элементов в DOM методом appendChild
Оригинал статьи: Cheat sheet for moving from jQuery to vanilla JavaScript
Перевод: Земсков Матвей