Функции each() в библиотеке jQuery: как с их помощью строить циклы
Рассказываем об универсальных вспомогательных функциях each(): для чего нужны, чем различаются и как работают.
Иллюстрация: Оля Ежак для Skillbox Media
В библиотеке jQuery есть две функции, которые используют для перебора элементов в циклах:
$.each() — универсальная, для массивов и объектов. Это одна из самых популярных функций библиотеки.
$(selector).each() — вспомогательная, используется только с объектами jQuery.
В этой статье вы узнаете:
Перебор массива
Чтобы перебрать массив, применяют функцию jQuery $.each(). Она выглядит так:
$.each(array, callback)
У неё есть два обязательных параметра:
array — массив;
callback — функция, выполняемая для каждого элемента массива. Она выглядит так:
function(index, value)
Здесь index — индекс, а value — значение текущего элемента.
Элементы массива итерируются по числовому индексу от 0 до length − 1, где length — длина массива.
Пример 1. Переберём массив arrf и выведем индекс и значение каждого элемента в консоль:
Получим:
Перебор объектов
Чтобы перебрать свойства объекта, в jQuery также применяют $.each(). При этом используется пара ключ: значение, где ключ — это строка с именем свойства, а значение — значение свойства (оно может быть любого типа).
Функция выглядит так:
$.each(obj, callback)
Здесь obj — это объект;
callback — функция вида function(key, value), выполняемая для каждого свойства объекта.
Пример 2. Зададим объект cat с определёнными свойствами. Выведем названия и значения этих свойств в консоль.
Программа выведет в консоль:
Используя $.each(), в jQuery можно перебирать не только свойства объекта, но и объекты в массиве. Покажем это на примере.
Пример 3. Создадим массив объектов students, содержащий фамилии, имена и возраст студентов. Выведем список студентов в консоль:
Результат работы программы:
Перебор элементов DOM
Функция $(selector).each() используется в jQuery для работы с DOM-элементами. Она упрощает работу с циклами и позволяет сократить количество возможных ошибок.
При вызове функция итерирует элементы DOM, входящие в объект jQuery. Она имеет следующий вид:
$(selector).each(callback)
Здесь selector — CSS-селектор, выбирающий элементы DOM;
callback — функция c двумя необязательными параметрами:
index — числовой индекс DOM-элемента, (от 0 до length − 1);
element — ссылка на элемент.
Кроме того, внутри функции callback можно употреблять ключевое слово this, также содержащее ссылку на элемент DOM.
Рассмотрим это на примерах.
Пример 4. Переберём элементы div и выведем в консоль индекс и класс каждого:
В консоли увидим:
Если мы используем служебное слово this, то можем убрать параметр element. Это будет выглядеть так:
break и continue в циклах с each()
В циклах jQuery с each() можно делать прерывание (аналог break), переходить к следующей итерации (аналог continue), организовывать вложенные циклы. Рассмотрим на примерах, как это сделать в программе.
Пример 5. Прерывание цикла. Чтобы остановить перебор элементов, применяют оператор return, возвращающий false.
Зададим массив и переберём его элементы. Из каждого элемента с индексом меньше 4 сформируем текстовый абзац и выведем его на экран. Когда индекс достигнет 4, прервём цикл:
Программа выведет на экран:
Пример 6. Переход на следующий шаг цикла (continue). Здесь прерывание операции делается также с помощью оператора jQuery return, но он возвращает true.
Рассмотрим массив из предыдущего примера. Выведем на экран элементы с индексом больше 4. Скрипт будет выглядеть так:
На экране увидим:
Пример 7. Перебор вложенных структур. Зададим объект, свойства которого представляют собой массивы объектов. Переберём свойства и выведем их значения в консоль:
Увидим в консоли:
Выводы
Функции $.each() и $(selector).each() — это удобные инструменты для перебора массивов, объектов, элементов веб-страниц. С их помощью можно строить в программах простые и вложенные циклы, организовывать сложные конструкции. Подобно другим функциям jQuery, each() работает во всех браузерах, исключая устаревшие, вроде Internet Explorer 6.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!