Статьи

5 Примеры функций jQuery.each ()

Это обширный обзор функции jQuery.each() — одной из наиболее важных и наиболее часто используемых функций jQuery. В этой статье мы узнаем почему и посмотрим, как вы можете его использовать.

Эта популярная статья была обновлена ​​в 2020 году, чтобы отразить текущую передовую практику и обновить рекомендации по нативным решениям с использованием современного JavaScript.

Что такое jQuery.each ()

Функция each () jQuery используется для циклического прохождения каждого элемента целевого объекта jQuery — объекта, который содержит один или несколько элементов DOM и предоставляет все функции jQuery. Это очень полезно для многоэлементных манипуляций с DOM, а также для перебора произвольных массивов и свойств объекта.

В дополнение к этой функции jQuery предоставляет вспомогательную функцию с тем же именем, которую можно вызывать без предварительного выбора или создания каких-либо элементов DOM.

Синтаксис jQuery.each ()

Давайте посмотрим на различные режимы в действии.

В следующем примере выбирается каждый элемент <div> на веб-странице и выводится индекс и идентификатор каждого из них:

 // DOM ELEMENTS $('div').each(function(index, value) { console.log(`div${index}: ${this.id}`); }); 

Возможный результат будет:

 div0:header div1:main div2:footer 

Эта версия использует функцию jQuery $(selector).each() , а не функцию полезности.

В следующем примере показано использование функции полезности. В этом случае объект для зацикливания задается в качестве первого аргумента. В этом примере мы покажем, как перебрать массив:

 // ARRAYS const arr = [ 'one', 'two', 'three', 'four', 'five' ]; $.each(arr, function(index, value) { console.log(value); // Will stop running after "three" return (value !== 'three'); }); // Outputs: one two three 

В последнем примере мы хотим продемонстрировать, как перебирать свойства объекта:

 // OBJECTS const obj = { one: 1, two: 2, three: 3, four: 4, five: 5 }; $.each(obj, function(key, value) { console.log(value); }); // Outputs: 1 2 3 4 5 

Все это сводится к обеспечению надлежащего обратного вызова. Контекст обратного вызова, this , будет равен его второму аргументу, который является текущим значением. Однако, поскольку контекст всегда будет объектом, примитивные значения должны быть обернуты:

 $.each({ one: 1, two: 2 } , function(key, value) { console.log(this); }); // Number { 1 } // Number { 2 } 

`

Это означает, что нет строгого равенства между значением и контекстом.

 $.each({ one: 1 } , function(key, value) { console.log(this == value); console.log(this === value); }); // true // false 

`

Первым аргументом является текущий индекс, который является либо числом (для массивов), либо строкой (для объектов).

1. Пример базовой функции jQuery.each ()

Давайте посмотрим, как функция jQuery.each () помогает нам в сочетании с объектом jQuery. Первый пример выбирает все элементы a на странице и выводит их атрибут href :

 $('a').each(function(index, value){ console.log(this.href); }); 

Второй пример выводит каждый внешний href на веб-странице (при условии только протокола HTTP (S)):

 $('a').each(function(index, value){ const link = this.href; if (link.match(/https?:\/\//)) { console.log(link); } }); 

Допустим, у нас были следующие ссылки на странице:

 <a href="https://www.sitepoint.com/">SitePoint</a> <a href="https://developer.mozilla.org">MDN web docs</a> <a href="http://example.com/">Example Domain</a> 

Второй пример будет выводить:

 https://www.sitepoint.com/ https://developer.mozilla.org/ http://example.com/ 

Следует отметить, что элементы DOM из объекта jQuery находятся в «родной» форме внутри обратного вызова, переданного в jQuery.each() Причина в том, что jQuery на самом деле является просто оболочкой для массива элементов DOM. Используя jQuery.each() , этот массив повторяется так же, как и обычный массив. Поэтому мы не получаем упакованные элементы из коробки.

Со ссылкой на наш второй пример это означает, что мы можем получить атрибут href элемента, написав this.href . Если бы мы хотели использовать метод attr() в jQuery , нам нужно было бы $(this).attr('href') элемент следующим образом: $(this).attr('href') .

2. Пример массива jQuery.each ()

Давайте еще раз посмотрим, как можно обрабатывать обычный массив:

 const numbers = [1, 2, 3, 4, 5]; $.each(numbers, function(index, value){ console.log(`${index}: ${value}`); }); 

Этот фрагмент выводит:

 0:1 1:2 2:3 3:4 4:5 

Здесь нет ничего особенного. Массив имеет числовые индексы, поэтому мы получаем числа от 0 до N-1 , где N — количество элементов в массиве.

3. Пример JQuery.each () JSON

У нас могут быть более сложные структуры данных, такие как массивы в массивах, объекты в объектах, массивы в объектах или объекты в массивах. Давайте посмотрим, как jQuery.each() может помочь нам в таких сценариях:

 const colors = [ { 'red': '#f00' }, { 'green': '#0f0' }, { 'blue': '#00f' } ]; $.each(colors, function() { $.each(this, function(name, value) { console.log(`${name} = ${value}`); }); }); 

Этот пример выводит:

 red = #f00 green = #0f0 blue = #00f 

Мы обрабатываем вложенную структуру с помощью вложенного вызова jQuery.each() . Внешний вызов обрабатывает массив переменных colors ; внутренний вызов обрабатывает отдельные объекты. В этом примере каждый объект имеет только один ключ, но в общем случае любой номер может быть обработан с помощью этого кода.

4. Пример класса jQuery.each ()

В этом примере показано, как productDescription каждый элемент с назначенным классом productDescription заданным в HTML ниже:

 <div class="productDescription">Red</div> <div>Pink</div> <div class="productDescription">Orange</div> <div class="generalDescription">Teal</div> <div class="productDescription">Green</div> 

Мы используем помощник each() вместо метода each() в селекторе.

 $.each($('.productDescription'), function(index, value) { console.log(index + ':' + $(value).text()); }); 

В этом случае вывод:

 0:Red 1:Orange 2:Green 

Нам не нужно включать индекс и значение. Это просто параметры, которые помогают определить, на каком элементе DOM мы сейчас выполняем итерацию. Кроме того, в этом сценарии мы также можем использовать более удобный each метод. Мы можем написать это так:

 $('.productDescription').each(function() { console.log($(this).text()); }); 

И мы получим это на консоли:

 Red Orange Green 

Обратите внимание, что мы оборачиваем элемент DOM в новый экземпляр jQuery, чтобы мы могли использовать метод text() jQuery для получения текстового содержимого элемента.

5. Пример задержки jQuery.each ()

В следующем примере, когда пользователь щелкает по элементу с идентификатором 5demo все элементы списка будут немедленно 5demo оранжевым цветом.

 <ul id="5demo"> <li>One</li> <li>Two</li> <li>Three</li> <li>Four</li> <li>Five</li> </ul> 

После задержки, зависящей от индекса ( 0 , 200 , 400 ,… миллисекунд), мы постепенно затухаем:

 $('#5demo').on('click', function(e) { $('li').each(function(index) { $(this).css('background-color', 'orange') .delay(index * 200) .fadeOut(1500); }); e.preventDefault(); }); 

Вывод

В этом посте мы продемонстрировали, как использовать jQuery.each() для перебора элементов, массивов и объектов DOM. Это мощная и экономящая время маленькая функция, которую разработчики должны иметь в своих наборах инструментов.

И если jQuery не ваша вещь, вы можете посмотреть на использование нативных методов JavaScript Object.keys () и Array.prototype.forEach () . Существуют также библиотеки, такие как foreach, которые позволяют перебирать пары значений ключа либо объекта, подобного массиву, либо объекта, подобного словарю.

Помните: $.each() и $(selector).each() — это два разных метода, определенных двумя разными способами.