Код
#статьи

Функции 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 и выведем индекс и значение каждого элемента в консоль:

// Объявляем массив arrf
var arrf = ['square', 'circle', 'triangle'];


// Перебор массива
$.each(arrf, function(inf, valf){


 // inf — индекс текущего элемента
  // valf — его значение


  // Вывод в консоль
  console.log(inf + ': ' + valf);


})

Получим:

0: square
1: circle
2: triangle

Перебор объектов

Чтобы перебрать свойства объекта, в jQuery также применяют $.each(). При этом используется пара ключ: значение, где ключ — это строка с именем свойства, а значение — значение свойства (оно может быть любого типа).

Функция выглядит так:

$.each(obj, callback)

Здесь obj — это объект;

callback — функция вида function(key, value), выполняемая для каждого свойства объекта.

Пример 2. Зададим объект cat с определёнными свойствами. Выведем названия и значения этих свойств в консоль.

// Зададим объект и определим его свойства
var cat = {
    animal: "Кот",
    name: "Мурзик",
    color: "Рыжий",
    eyes: "Зелёные",
    wool: "Короткошёрстный",
    breed: "Беспородный"
    };
   
    // Переберём свойства объекта
    $.each(cat, function(key, value) {
   
    // key — название свойства
    // value — его значение
   
    // Вывод в консоль
    console.log(key + ': ' + value);
   
    });

Программа выведет в консоль:

animal: Кот
name: Мурзик
color: Рыжий
eyes: Зелёные
wool: Короткошёрстный
breed: Беспородный

Используя $.each(), в jQuery можно перебирать не только свойства объекта, но и объекты в массиве. Покажем это на примере.

Пример 3. Создадим массив объектов students, содержащий фамилии, имена и возраст студентов. Выведем список студентов в консоль:

// Определим массив объектов students и свойства каждого объекта
var students= [
    { FirstName: "Андрей", LastName: "Кузнецов", Age: "19"},
    { FirstName: "Максим", LastName: "Смирнов", Age: "21"},
    { FirstName: "Алексей", LastName: "Курченко", Age: "23"},
    { FirstName: "Денис", LastName: "Рыбаков", Age: "20"},
    { FirstName: "Татьяна", LastName: "Афанасьева", Age: "18"}
  ]
$.each(students, function (index, value) {
    // index — индекс текущего объекта в массиве students
    // value — значение текущего объекта
    console.log("Имя: "+value.FirstName+"; Фамилия: "+value.LastName+"; Возраст: "+value.Age);
});

Результат работы программы:

Имя: Андрей; Фамилия: Кузнецов; Возраст: 19
Имя: Максим; Фамилия: Смирнов; Возраст: 21
Имя: Алексей; Фамилия: Курченко; Возраст: 23
Имя: Денис; Фамилия: Рыбаков; Возраст: 20
Имя: Татьяна; Фамилия: Афанасьева; Возраст: 18

Перебор элементов 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 и выведем в консоль индекс и класс каждого:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF—8">
    <meta httpequiv="X—UA—Compatible" content="IE=edge">
    <meta name="viewport" content="width=device—width, initial—scale=1.0">
    <title>Document</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
   
    <div class="block1">a b c d e f </div>
    <div class="block2">j h k l m n o p</div>
    <div class="block3">q r s t f v w</div>
    <script>
    // Перебрать элементы div на странице
    $('div').each(function (index, element) {
        // div — селектор функции each()
        // index — текущий индекс
        // element — ссылка на текущий элемент
     
    console.log('Индекс элемента: ' + index + '; класс элемента: ' +$(element).attr('class'));
   });    
    </script>  
</body>
</html>

В консоли увидим:

Индекс: 0; класс: block1
Индекс: 1; класс: block2
Индекс: 2; класс: block3

Если мы используем служебное слово this, то можем убрать параметр element. Это будет выглядеть так:

$('div').each(function (index)) {
  console.log('Индекс: ' + index + '; класс: ' + $(this).attr('class'));
}

break и continue в циклах с each()

В циклах jQuery с each() можно делать прерывание (аналог break), переходить к следующей итерации (аналог continue), организовывать вложенные циклы. Рассмотрим на примерах, как это сделать в программе.

Пример 5. Прерывание цикла. Чтобы остановить перебор элементов, применяют оператор return, возвращающий false.

Зададим массив и переберём его элементы. Из каждого элемента с индексом меньше 4 сформируем текстовый абзац и выведем его на экран. Когда индекс достигнет 4, прервём цикл:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF—8">
    <meta httpequiv="X—UA—Compatible" content="IE=edge">
    <meta name="viewport" content="width=device—width, initial—scale=1.0">
    <title>Document</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
    <script>
        var fruits = ["Яблоко", "Арбуз", "Апельсин", "Виноград", "Киви", "Груша"];
        $(function() {
            $.each(fruits, function(index, value) {
                if (index == 4) return false;
                $("body").append("<p>" + index + " " + value + "<p>");  
           });
        });
    </script>  
</body>
</html>

Программа выведет на экран:

0 Яблоко
1 Арбуз
2 Апельсин
3 Виноград

Пример 6. Переход на следующий шаг цикла (continue). Здесь прерывание операции делается также с помощью оператора jQuery return, но он возвращает true.

Рассмотрим массив из предыдущего примера. Выведем на экран элементы с индексом больше 4. Скрипт будет выглядеть так:

<script>
   
        var fruits = ["Яблоко", "Арбуз", "Апельсин", "Виноград", "Киви", "Груша"];   
        $(function() {
        $.each(fruits, function(index, value) {
            if (index < 4) return;
            $("body").append("<p>"+ index + " " + value + "<p>");   
          });
       });
     
</script>

На экране увидим:

4 Киви
5 Груша

Пример 7. Перебор вложенных структур. Зададим объект, свойства которого представляют собой массивы объектов. Переберём свойства и выведем их значения в консоль:

var smartphones = {
  'Apple': [
    {'name':'iPhone 14', 'memory':'128GB', 'color':'Black'},
    {'name':'iPhone 12', 'memory': '64GB', 'color':'Blue'}
  ],
  'Xiaomi': [
    {'name':'13T', 'memory': '256GB', 'color':'Silver'},
    {'name': '12T', 'memory': '256GB', 'color':'Black'}
  ],
};
$.each(smartphones,function(key, data) {
  console.log(key);
  $.each(data, function(index, value) {
    console.log(value['name'] + ', memory: '+ value['memory'] + ', color: '+ value['color']);
  });
});

Увидим в консоли:

Apple:
iPhone 14, memory: 128GB, color: Black
iPhone 12, memory: 64GB, color: Blue
Xiaomi:
13T, memory: 256GB, color: Silver
12T, memory: 256GB, color: Black

Выводы

Функции $.each() и $(selector).each() — это удобные инструменты для перебора массивов, объектов, элементов веб-страниц. С их помощью можно строить в программах простые и вложенные циклы, организовывать сложные конструкции. Подобно другим функциям jQuery, each() работает во всех браузерах, исключая устаревшие, вроде Internet Explorer 6.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована