jQuery — это JavaScript, поэтому код подчиняется в том числе стилю JS.
Переменные, содержащие jQuery-коллекции, должны иметь префикс $:
// Плохо, нет префикса
const links = $('#menu').find('.js-menu-link');
// Хорошо, есть префикс
const $links = $('#menu').find('.js-menu-link');При создании пустого элемента закрывающие теги не используем:
// Плохо, лишние символы
let $el = $('<div/>');
let $el = $('<div></div>');
// Хорошо
let $el = $('<div>');Элементы с атрибутами и/или контентом создаем, передавая объект опций вторым параметром в функцию $():
// Плохо, куча всего в строке, сложно читать
let $el = $('<div class="my-text">Hello</div>');
// Хорошо
let $el = $('<div>', {
'class': 'my-text',
text: 'Hello'
});События навешиваем только через .on, штрткатами, типа, .click() или .submit() не пользуемся:
// Плохо, событие через шорткат
$('#button').click(ev => {
// ...
});
// Хорошо, событие через `.on`
$('#button').on('click', ev => {
// ...
});Переменную с событием для консистентности именуем ev (не e и не event):
// Плохо
$('.btn').on('click', (e) => {
// ...
});
// Хорошо
$('.btn').on('click', (ev) => {
// ...
});Ну как-то так повелось...
Для генерации кастомных событий используем triggerHandler:
- он работает только с jQuery, никак не касается родных событий браузера;
- события через
triggerHandlerне всплывают.
trigger используем только когда нужно сгенерировать нативное событие браузера. Например, клик на ссылке, на которую навешен обработчик через addEventListener (на чистом JS без jQuery).
Не используем теги в селекторах:
// Плохо
var $menu = $('div#menu');
// Хорошо
var $menu = $('#menu');Если элемент на странице один, то делаем выборку по id, если нужно выбрать несколько элементов, даем им классы с префиксом js- и делаем выборку по классу:
// Плохо
var $topNav = $('nav.top-nav');
// Хорошо
var $topNav = $('.js-top-nav');При поиске элементов стараемся использовать уже существующие jQuery-коллекции, хранящиеся в переменных, и контекстный поиск через метод .find():
// Плохо, работает медленно
const $links = $('#menu .js-menu-link');
// Хорошо, работает гораздо быстрее
const $links = $('#menu').find('.js-menu-link');
// Если нужно обратиться к выборке несколько раз — сохранили ее в переменную
const $menu = $('#menu');
$menu.find('.js-menu-link')
$menu.addClass('_open');Некотоыре методы в jQuery-коллекциях имеют эквиваленты в виде фильтров. Предпочтительно использовать методы, они работают быстрее:
// Плохо
const $firstParagraph = $('p:first');
// Хорошо
const $firstParagraph = $('p').first();