Работа с выборкой в jquery
Содержание:
- Работа с выборкой
- основы
- Every
- Основные селекторы
- Как использовать метод .each() в Vanilla JavaScript?
- Число
- Построение предложений
- Описание
- Сверху documentElement и body
- JS Массивы Добавление и удаление элементов. Свойство length
- Every
- Итерируемые объекты и псевдомассивы
- Навигация только по элементам
- Методы перебирающие массив в ECMAScript 5
- Each
- Пример класса jQuery.each()
Работа с выборкой
После создания объекта jQuery содержащего вашу выборку, вы, вероятно, хотите что-то с ней сделать. Но до этого рассмотрим несколько принципов, которые являются ключевыми для понимания того, что делает jQuery.
Проверка выборки
Мы можем определить, соответствует ли выборка определённому критерию, с помощью метода .is(). Этот метод наиболее часто используется, чтобы предоставить селектор в качестве единственного аргумента. Он возвращает true или false в зависимости от того, соответствует ли выборка селектору:
Вы также можете передать в метод .is() объект jQuery, исходный элемент DOM или даже функцию, если вам нужна комплексная проверка. Смотрите документацию для получения подробной информации.
Получение, установка и неявный перебор
Есть много методов, которые вы можете вызвать после создания выборки. Эти методы, как правило, делятся на две категории: метод чтения (геттер) и устанавливающий метод (сеттер). Методы чтения извлекают фрагмент информации из выборки, а методы установки в некотором роде изменяют выборку. Практически во всех случаях методы чтения оперируют только первым элементом в выборке (.text() является известным исключением); методы установки же работают для всех элементов в выборке используя то, что известно как неявный перебор.
Неявный перебор означает, что jQuery автоматически перебирает все элементы в выборке, когда вы вызываете для выборки устанавливающий метод. Это означает, что если вы хотите сделать что-то для всех элементов в выборке, то не должны вызывать метод для каждого элемента в вашей выборке — просто вызываете метод для самой выборки и jQuery обработает элементы для вас.
Предположим, что вы хотите изменить HTML у всех пунктов списка на странице. Чтобы сделать это мы должны использовать метод .html(), который изменит HTML у всех выбранных пунктов списка.
Вы также можете передать функцию в метод установки jQuery. Возвращаемое значение этой функции используется в качестве нового значения и оно получает два аргумента: индекс элемента в выборке и старое значение, которое вы пытаетесь изменить. Это полезно, когда вам необходима информация о текущем состоянии элемента, чтобы правильно установить новое состояние.
Явный перебор
Иногда задача, которую вы пытаетесь решить, не вписываются ни в один из существующих методов jQuery и тогда вы должны сделать явный перебор выборки с помощью метода .each(). В следующем коде в начало пункта списка мы добавляем тег <b> содержащий индекс элемента списка.
Заметьте, что внутри функции, которую мы передаём в .each(), у нас есть два способа доступа к текущему исходному элементу DOM: через this и через elem. Как обсуждалось в разделе «Основы JavaScript», this — специальное ключевое слово в JavaScript, указатель на объект, который является текущим контекстом функции. В jQuery this почти всегда относится к исходному элементу DOM, с которым функция в данный момент работает. Так, в случае .each(), this относится к текущему элементу в наборе элементов которые мы перебираем.
Цепочки
Одной из самых выгодных частей jQuery является способность «сцеплять» методы вместе. Это означает, что мы можем вызвать набор методов для выборки без её повторения или сохранения выборки в переменной. Мы даже можем сделать новые выборки на основе предыдущих и всё без разрыва цепочки.
Цепочки возможны, потому что каждый устанавливающий метод в jQuery возвращает выборку, с которой он был вызван. Это чрезвычайно мощная особенность и многие библиотеки взяли её на вооружение
Тем не менее, она должна применяться с осторожностью. Большие цепочки могут сделать код чрезвычайно трудным для чтения, изменения и отладки
Нет жёстких правил, насколько длинной должна быть цепочка, но даже для простой цепочки выше, вероятно, следует провести рефакторинг для удобства чтения.
основы
традиционный for-петля состоит из трех компонентов :
- инициализации : выполняется до того, как блок look будет выполнен в первый раз
- состояние : проверяет условие каждый раз перед выполнением блока цикла и завершает цикл, если false
- спохватившись : выполняется каждый раз после выполнения блока цикла
эти три компонента отделены друг от друга с помощью ; символ. Содержание для каждого из этих трех компонентов является необязательным, что означает, что следующее является наиболее минимальным for-петли можно :
for (;;) { // Do stuff}
конечно, вам нужно включить if(condition === true) { break; } или if(condition === true) { return; } внутри for-цикл, чтобы заставить его перестать работать.
обычно, хотя, инициализация используется для объявления индекса, условие используется для сравнения этого индекса с минимальным или максимальным значением, а запоздалая мысль используется для увеличения индекса:
for (var i = 0, length = 10; i < length; i++) { console.log(i);}
Every
Используется для того, чтобы говорить о предметах (или людях) в обобщенном значении. Как правило, every используется для описания чего-то в больших количествах. Другим словами, значение every приравнивается по смыслу к «каждый из всех, каждый из множества». Every не выделяет некоторые предметы, а просто называет их.
Пример:
Every little girl wants to be a beautiful princess. – Каждая маленькая девочка хочет быть прекрасной принцессой. (Имеются в виду все девочки мира, которых, естественно, очень много.)
Случаи употребления:
- Когда речь идет о множестве предметов (людей): Every retired person deserves good living conditions. – Каждый пенсионер заслуживает жить в хороших условиях.
- В устойчивых сочетаниях: every other day – через день, every now and then – время от времени, with every good wish – с наилучшими пожеланиями).
- Для указания на периодичность событий: I loved every minute of our journey. – Мне невероятно понравилась каждая минута нашего путешествия.
- В производных словах в сочетании с -body, -thing, -one и -where (everythigh — всё, everywhere – везде, everybody — все и др).
Чтобы четко понимать, в чем заключается «each / every» разница, разберем особенности значений и употребления местоимения each.
Основные селекторы
Основные селекторы вам знакомы, если вы когда-нибудь создавали хотя бы один шаблон CSS. скорее всего, вы будете использовать данные селекторы на протяжении 90% всего времени работы с jQuery:
Селектор | Описание | Пример |
---|---|---|
Все | Выбирает все элементы на странице, включая , и так далее. | |
Элемент | Выбирает все элементы с заданным тегом. | |
Класс | Выбирает все элементы с заданным именем класса. | |
ID | Выбирает один элемент с заданным атрибутом . |
Вы также можете комбинировать несколько селекторов в один с помощью запятой. jQuery выберет все элементы, которые соответствуют любому из селекторов. Например:
// Выбирает все div с классом .myClass, а также все параграфы var selectedElements = $("div.myClass, p");
Как использовать метод .each() в Vanilla JavaScript?
Метод также может быть воспроизведен в Vanilla JavaScript с помощью встроенных методов. В качестве примера рассмотрим следующий список:
<ul class="team-standings"> <li>Mercedes</li> <li>Ferrari</li> <li>Red Bull Racing</li> <li>Renault</li> <li>Haas Ferrari</li> </ul>
Если бы мы использовали для итерации по элементам, код был бы следующим:
$('.team-standings li').each(function(index) { // текущий элемент console.log($(this).text())); console.log(index); });
Того же самого можно добиться в JavaScript, используя цикл и собственные функции селектора:
- : этот метод возвращает массив элементов, соответствующих указанному CSS-селектору;
- : этот метод возвращает первый элемент, который соответствует указанному селектору CSS. В отличие от , который возвращает массив, этот метод возвращает только один результат.
Тот же код в Vanilla JS будет выглядеть так:
var li = document.querySelectorAll('.team-standings li'); li.forEach(function(element, index) { // текущий элемент DOM console.log(element.textContent); console.log(index); });
Вместо в jQuery можно получить текущий элемент DOM через первый параметр функции обратного вызова .
Число
Числовой тип данных () представляет как целочисленные значения, так и числа с плавающей точкой.
Существует множество операций для чисел, например, умножение , деление , сложение , вычитание и так далее.
Кроме обычных чисел, существуют так называемые «специальные числовые значения», которые относятся к этому типу данных: , и .
-
представляет собой математическую ∞. Это особое значение, которое больше любого числа.
Мы можем получить его в результате деления на ноль:
Или задать его явно:
-
означает вычислительную ошибку. Это результат неправильной или неопределённой математической операции, например:
Значение «прилипчиво». Любая операция с возвращает :
Если где-то в математическом выражении есть , то результатом вычислений с его участием будет .
Математические операции – безопасны
Математические операции в JavaScript «безопасны». Мы можем делать что угодно: делить на ноль, обращаться с нечисловыми строками как с числами и т.д.
Скрипт никогда не остановится с фатальной ошибкой (не «умрёт»). В худшем случае мы получим как результат выполнения.
Специальные числовые значения относятся к типу «число». Конечно, это не числа в привычном значении этого слова.
Подробнее о работе с числами мы поговорим в главе Числа.
Построение предложений
Мы можем использовать each как с существительным, так и в одиночку.
A square has four sides. Each side is the same length.
Или
Each is the same length.
Мы также можем употребить конструкцию each one.
Each one is the same length.
Each может употребляться с предлогом of.
При этом существительное или местоимение после предлога употребляется во множественном числе.
Each of the cars in the parking lot is dirty / Each of them should be cleaned. (Каждая машина на парковке грязная / Каждую из них следует помыть).
Мы можем употреблять each в середине предложения.
The students were each given a book. (Each student was given a book) — каждому студенту раздали книгу.
В отличие от each, every не может употребляться в одиночку.
There are so many books in the library. She read every book.
Неверно — She read every.
Но мы можем использовать every one.
Has she read all the books? Yes, every one.
С предлогом of мы можем использовать только конструкцию every one.
- She’s read every one of them.
- She’s read every one of those books. Неверно —
Every of them/those books.
Обратите внимание, что everyone и every one два разных слова. Everyone (everybody) используется для людей, в качестве подлежащего или дополнения
Everyone (everybody) используется для людей, в качестве подлежащего или дополнения.
- I remember everyone in my class. (Я помню всех из класса);
- Everyone was glad. (Всё были довольны).
Every one (раздельное написание) может быть использовано как для людей, так и вещей.
He was asked a lot of questions at the exam. And he answered every one (of them). (Ему задавали много вопросов на экзамене. И он ответил на все)
Описание
Массивы являются спископодобными объектами, чьи прототипы содержат методы для операций обхода и изменения массива. Ни размер JavaScript-массива, ни типы его элементов не являются фиксированными. Поскольку размер массива может увеличиваться и уменьшаться в любое время, то нет гарантии, что массив окажется плотным. То есть, при работе с массивом может возникнуть ситуация, что элемент массива, к которому вы обратитесь, будет пустым и вернёт . В целом, это удобная характеристика; но если эта особенность массива не желательна в вашем специфическом случае, вы можете рассмотреть возможность использования типизированных массивов.
Некоторые полагают, что вы не должны использовать массив в качестве ассоциативного массива. В любом случае, вместо него вы можете использовать простые , хотя у них есть и свои подводные камни. Смотрите пост Легковесные JavaScript-словари с произвольными ключами(англ.) в качестве примера.
Массивы в JavaScript индексируются с нуля: первый элемент массива имеет индекс, равный , а индекс последнего элемента равен значению свойства массива минус 1.
Элементы массива являются свойствами, точно такими же, как, например, свойство , однако попытка получить элемент массива по имени его свойства приведёт к синтаксической ошибке, поскольку имя свойства не является допустимым именем JavaScript:
Это не особенность массивов или их свойств. В JavaScript к свойствам, начинающимся с цифры, невозможно обратиться посредством точечной нотации; к ним можно обратиться только с помощью скобочной нотации. Например, если у вас есть объект со свойством, названным , вы сможете обратиться к нему только посредством скобочной нотации. Примеры:
Обратите внимание, что во втором примере заключено в кавычки:. Индексы можно заключать в кавычки (например вместо ), но в этом нет необходимости
Значение 2 в выражении будет неявно приведено к строке движком JavaScript через метод преобразования . Именно по этой причине ключи и будут ссылаться на два разных элемента в объекте и следующий пример выведет :
Аналогично, к свойствам объекта, являющимся зарезервированными словами(!) можно получить доступ только посредством скобочной нотации:
Свойство массивов взаимосвязано с числовыми свойствами. Некоторые встроенные методы массива (например, , , и т.д.) учитывают значение свойства при своём вызове. Другие методы (например, , и т.д.) в результате своей работы также обновляют свойство массива.
При установке свойства в массиве, если свойство имеет действительный индекс и этот индекс выходит за пределы текущих границ массива, движок соответствующим образом обновит свойство :
Увеличиваем свойство
Однако, уменьшение свойства приведёт к удалению элементов.
Более подробно эта тема освещена на странице, посвящённой свойству .
Результатом сопоставления регулярного выражения строке является JavaScript-массив. Этот массив имеет свойства и элементы, предоставляющие информацию о сопоставлении. Подобные массивы возвращаются методами , и . Чтобы было проще понять, откуда и какие появились свойства и элементы, посмотрите следующий пример и обратитесь к таблице ниже:
Свойства и элементы, возвращаемые из данного сопоставления, описаны ниже:
Свойство/Элемент | Описание | Пример |
Свойство только для чтения, отражающее оригинальную строку, с которой сопоставлялось регулярное выражение. | cdbBdbsbz | |
Свойство только для чтения, являющееся индексом (отсчёт начинается с нуля) в строке, с которого началось сопоставление. | 1 | |
Элемент только для чтения, определяющий последние сопоставившиеся символы. | dbBd | |
Элементы только для чтения, определяющие сопоставившиеся подстроки, заключённые в круглые скобки, если те включены в регулярное выражение. Количество возможных подстрок не ограничено. | : bB : d |
Сверху documentElement и body
Самые верхние элементы дерева доступны напрямую из .
- =
- Первая точка входа – . Это свойство ссылается на DOM-объект для тега .
- =
- Вторая точка входа – , который соответствует тегу .
В современных браузерах (кроме IE8-) также есть – прямая ссылка на
Есть одна тонкость: может быть равен
Нельзя получить доступ к элементу, которого ещё не существует в момент выполнения скрипта.
В частности, если скрипт находится в , то в нём недоступен .
Поэтому в следующем примере первый выведет :
В DOM активно используется
В мире DOM в качестве значения, обозначающего «нет такого элемента» или «узел не найден», используется не , а .
JS Массивы Добавление и удаление элементов. Свойство length
JavaScript
<script>
var sameoneArr = ;
var obgectArr = new Array(10);
var count1 = sameoneArr.length; //Возвращает количество элементов в массиве
var count2 = obgectArr.length; //Возвращает количество элементов в массиве
document.write(«Количество элементов в классическом массиве » + count1 + » — » + sameoneArr + «<br />»);
document.write(«Количество элементов в объектном массиве » + count2 + » — » + obgectArr + «<br />»);
document.write(«<br /><hr />»);
var myArr = ;
myArr.push(«<strong>Новый фрукт</strong>»); //Добавляет элемент в самый конец массива
document.write(«Добавляет элемент в самый конец массива <strong>push</strong>:<br /> » + myArr + «<br />»);
document.write(«<br /><hr />»);
myArr.unshift(«<strong>Ещё один Новый фрукт</strong>»); //Добавляет элемент в начало
document.write(«Добавляет элемент в начало <strong>unshift</strong>:<br /> » + myArr + «<br />»);
document.write(«<br /><hr />»);
myArr.pop(); //Удаляем последний элемент из массива
document.write(«Удаляем последний элемент из массива <strong>pop</strong>:<br /> » + myArr + «<br />»);
document.write(«<br /><hr />»);
myArr.shift(); //Удаляем Первый элемент массива
document.write(«Удаляем Первый элемент массива <strong>shift</strong>:<br /> » + myArr + «<br />»);
document.write(«<br /><hr />»);
document.write(«Последний элемент массива <strong>myArr</strong>:<br /> » + myArr + «<br />»); //Выведем элемент который остался последним
document.write(«<br /><hr />»);
</script>
1 |
<script> varsameoneArr=»Нулевой элемент»,»Первый элемент»,»Второй элемент»,»Третий элемент»,»Четвёртый элемент»; varobgectArr=newArray(10); varcount1=sameoneArr.length;//Возвращает количество элементов в массиве varcount2=obgectArr.length;//Возвращает количество элементов в массиве document.write(«Количество элементов в классическом массиве «+count1+» — «+sameoneArr2+»<br />»); document.write(«Количество элементов в объектном массиве «+count2+» — «+obgectArr3+»<br />»); document.write(«<br /><hr />»); varmyArr=»Апельсин»,»Яблоко»,»Грецкий орех»,»Арбуз»,»Дыня»; myArr.push(«<strong>Новый фрукт</strong>»);//Добавляет элемент в самый конец массива document.write(«Добавляет элемент в самый конец массива <strong>push</strong>:<br /> «+myArr+»<br />»); document.write(«<br /><hr />»); myArr.unshift(«<strong>Ещё один Новый фрукт</strong>»);//Добавляет элемент в начало document.write(«Добавляет элемент в начало <strong>unshift</strong>:<br /> «+myArr+»<br />»); document.write(«<br /><hr />»); myArr.pop();//Удаляем последний элемент из массива document.write(«Удаляем последний элемент из массива <strong>pop</strong>:<br /> «+myArr+»<br />»); document.write(«<br /><hr />»); myArr.shift();//Удаляем Первый элемент массива document.write(«Удаляем Первый элемент массива <strong>shift</strong>:<br /> «+myArr+»<br />»); document.write(«<br /><hr />»); document.write(«Последний элемент массива <strong>myArr</strong>:<br /> «+myArrmyArr.length-1+»<br />»);//Выведем элемент который остался последним document.write(«<br /><hr />»); |
Количество просмотров: 317
| Категория: JavaScript | Тэги: массивы / основы
Every
- Слово «еvery» часто следует за притяжательными местоимениями:• I remembered his every word – я запомнила каждое его слово • He watched my every step – он следил за каждым моим шагом
- Предшествует существительным во множественном числе для обозначения промежутка времени, через который действие повторяется: • I visit my sick friend every two days – я навещаю своего больного друга каждые два дня • He calls me every three hours – он звонит мне каждые три часа
- В сочетании с абстрактными существительными слово «еvery» усиливает значение правильности какого-либо действия: • We, as your parents have every right to know all about you – мы, как твои родители, имеем полное право знать о тебе все • She has every reason to worry – у нее есть все причины беспокоиться
- «еvery» часто сопровождается наречиями nearly, almost, practically, just, about: • Аlmost every person was tired — почти все устали. • It was cold practically every day — Почти каждый день было холодно.
Итерируемые объекты и псевдомассивы
Есть два официальных термина, которые очень похожи, но в то же время сильно различаются. Поэтому убедитесь, что вы как следует поняли их, чтобы избежать путаницы.
- Итерируемые объекты – это объекты, которые реализуют метод , как было описано выше.
- Псевдомассивы – это объекты, у которых есть индексы и свойство , то есть, они выглядят как массивы.
При использовании JavaScript в браузере или других окружениях мы можем встретить объекты, которые являются итерируемыми или псевдомассивами, или и тем, и другим.
Например, строки итерируемы (для них работает ) и являются псевдомассивами (они индексированы и есть ).
Но итерируемый объект может не быть псевдомассивом. И наоборот: псевдомассив может не быть итерируемым.
Например, объект из примера выше – итерируемый, но не является псевдомассивом, потому что у него нет индексированных свойств и .
А вот объект, который является псевдомассивом, но его нельзя итерировать:
Что у них общего? И итерируемые объекты, и псевдомассивы – это обычно не массивы, у них нет методов , и т.д. Довольно неудобно, если у нас есть такой объект и мы хотим работать с ним как с массивом. Например, мы хотели бы работать с , используя методы массивов. Как этого достичь?
Навигация только по элементам
Навигационные ссылки, описанные выше, равно касаются всех узлов в документе. В частности, в сосуществуют и текстовые узлы и узлы-элементы и узлы-комментарии, если есть.
Но для большинства задач текстовые узлы нам не интересны.
Поэтому посмотрим на дополнительный набор ссылок, которые их не учитывают:
Эти ссылки похожи на те, что раньше, только в ряде мест стоит слово :
- – только дочерние узлы-элементы, то есть соответствующие тегам.
- , – соответственно, первый и последний дети-элементы.
- , – соседи-элементы.
- – родитель-элемент.
Зачем ? Неужели бывают родители не-элементы?
Свойство возвращает родитель элемента.
Оно всегда равно , кроме одного исключения:
Иногда это имеет значение, если хочется перебрать всех предков и вызвать какой-то метод, а на документе его нет.
Модифицируем предыдущий пример, применив вместо .
Теперь он будет выводить не все узлы, а только узлы-элементы:
Всегда верны равенства:
В IE8- поддерживается только
Других навигационных свойств в этих браузерах нет. Впрочем, как мы увидим далее, можно легко сделать полифил, и они, всё же, будут.
В IE8- в присутствуют узлы-комментарии
С точки зрения стандарта это ошибка, но IE8- также включает в узлы, соответствующие HTML-комментариям.
Это может привести к сюрпризам при использовании свойства , поэтому HTML-комментарии либо убирают либо используют фреймворк, к примеру, jQuery, который даёт свои методы перебора и отфильтрует их.
Методы перебирающие массив в ECMAScript 5
Подавляющее большинство браузеров поддерживают новые методы перебора массива, предоставляемые ECMAScript 5: forEach, map, и filter. Эти методы принимают функцию в качестве первого аргумента. Каждый элемент массива, в свою очередь, передается этой функции, которая принимает три аргумента: значение текущего элемента, его индекс и сам массив.
Функция, которую вы определяете, не должна использовать все три аргумента. В некоторых случаях вам понадобится использовать только значение элемента массива, что мы и покажем в наших примерах, демонстрирующих эти методы.
Метод forEach
Метод forEach перебирает элементы массива, как обычный JavaScript цикл for. Но вы не можете использовать оператор break для досрочного выхода, как в for. Метод forEach не возвращает значение.
В следующем примере мы объявляем массив и вызываем forEach. Передаем значение, индекс, и массив (v, i, a) в качестве аргумента функции, чтобы изменить массив, умножая каждое его значение на 2:
var ar = ; ar.forEach( function(v, i, ar) { ar = v*2; } ); console.log( ar ); //
В следующем примере мы создаем новый массив вместо того, чтобы преобразовать массив, вызванный forEach. Нам нужно только передать значение (v) для этого:
var ar = ; var ar2 = []; // новый массив // передаем значение, умножаем на 2, и выводим массив ar.forEach( function(v) { ar2.push(v*2); } ); // вид нового массива console.log( ar2 ); //
Значение элемента массива может быть использовано в JavaScript цикле по массиву forEach для любых целей. Но если вы хотите создать новый массив на основе значений существующего, то метод map подходит больше.
Метод map
Метод map создает новый массив. Каждый элемент из существующего массива передается аргументу функции map.
Возвращаемое значение функции определяет значение соответствующего элемента нового массива. В данном примере мы возвращаем значение (v),умноженное на 2:
var ar = ; var ar2 = ar.map( function(v) { return v*2; } ); console.log( ar2 ); //
Вот еще один пример использования метода map для преобразования первой буквы значения каждого элемента в верхний регистр:
var ar = ; var ar2 = ar.map( function(v) { return v.charAt(0).toUpperCase() + v.slice(1); } ); console.log( ar2 ); //
Часто нужно проверять тип значения элемента массива, прежде чем воздействовать на него. Например, если массив содержит значения, которые не являются строками в JavaScript, будет выводиться сообщение об ошибке «TypeError».
Поэтому мы включаем проверку типа:
var ar = ; var ar2 = ar.map( function(v) { if ( typeof v === 'string' ) { return v.charAt(0).toUpperCase() + v.slice(1); } } ); console.log( ar2 ); //
Обратите внимание, что для значений, не являющихся строками, было возвращено undefined. Это происходит потому, что массив, возвращенный методом map, соответствует длине JavaScript созданного массива в цикле, для которого он вызывался
Это происходит даже в разреженных массивах.
Пересмотрим нашу функцию, чтобы вернуть исходное значение, когда тип не является строкой:
var ar = ; var ar2 = ar.map( function(v) { if ( typeof v === 'string' ) { return v.charAt(0).toUpperCase() + v.slice(1); } else { return v; } } ); console.log( ar2 ); //
Что делать, если мы хотим, чтобы наш массив состоял только из элементов определенного типа? Для этого можем использовать метод filter.
Метод filter
Метод filter возвращает JavaScript созданный массив в цикле. Он выбирает из исходного массива и возвращает новый, состоящий из элементов, соответствующих заданным критериям. Мы можем использовать метод filter следующим образом, чтобы возвратить массив, содержащий только строковые значения:
var ar = ; var ar2 = ar.filter( function(v) { if ( typeof v === 'string' ) { return true; } } ); console.log( ar2 ); //
Метод filter проверяет каждый элемент массива, и его аргумент функции должен возвратить true или false, чтобы указать, следует ли включать текущий элемент из JavaScript цикла по массиву в возвращаемый массив или нет.
В этом примере используется оператор остатка от деления (%), с помощью которого формируется новый массив, содержащий только четные значения из исходного массива:
var ar = ; var ar2 = ar.filter( function(v) { return v % 2 === 0; } ); console.log( ar2 ); //
Метод filter пропускает отсутствующие элементы в разреженных массивах. Таким образом, он может быть использован для создания обычного массива из разреженного:
var ar = ; // разреженный массив // использование filter, чтобы вернуть плотную версию разреженного массива var ar2 = ar.filter( function() { return true; } ); console.log( ar2 ); //
Each
Применяется в случаях, когда речь идет об ограниченном количестве предметов (или людей). При переводе по смыслу соответствует значению «каждый из ограниченного количества, каждый из этих предметов». Each как бы подчеркивает значение каждого отдельного предмета, а не просто сообщает о них.
Пример:
Each tree in this garden was brought from different countries of the world. – Каждое дерево из этого сада было привезено из разных стран мира. (Имеются в виду не все деревья мира, а только деревья одного конкретного сада. То есть количество предметов ограничено.)
Случаи употребления:
- Когда речь идет об ограниченном количестве предметов (людей): Each puppy of our dog is very furry. – Каждый из щенков нашей собаки очень пушистый.
- Если речь только о двух предметах (или лицах): She had an apple in each hand. – В каждой руке у нее было по яблоку.
- В значении «каждый в отдельности»: Each member of our party has a right to vote for his candidate. – Каждый представитель нашей партии имеет право голосовать за своего кандидата.
- В устойчивых сочетаниях: each other – друг друга, each and all – все без разбора.
- В словосочетании each one, за которым не следует существительное: They have 3 cats. Each one was taken from the street. – У них трое котов. Каждый был подобран на улице.
- Во фразах «каждый из» (each + предлог of): Each of these vases was brought from China. – Каждая из этих ваз была привезена из Китая.
Таким образом разница each и every заключается в отношении к кругу предметов или лиц (ограниченному – each, неограниченному – every), а также в ряде случаев употребления, включая устойчивые выражения.
Пример класса jQuery.each()
В этом примере показано, как перебрать каждый элемент с классом productDescription:
<div class="productDescription">Красный</div> <div>Розовый</div> <div class="productDescription">Оранжевый</div> <div class="generalDescription">Синевато-зеленый</div> <div class="productDescription">Зеленый</div>
Вместе с селектором мы используем вспомогательную функцию each() вместо метода each():
$.each($('.productDescription'), function (index, value) { console.log(index + ':' + $(value).text()); });
Результат использования jQuery each function будет следующим: 0:Красный, 1: Оранжевый, 2:Зеленый.
Нам не нужно использовать индекс и значение. Это параметры, которые помогают определить, какой элемент DOM в настоящее время обрабатывается циклом. Кроме этого в сценарии можно использовать более удобный метод each():
$('.productDescription').each(function () { console.log($(this).text()); });
Результат:
Красный Оранжевый Зеленый
Нужно обернуть элемент DOM в новый экземпляр jQuery. Мы используем метод text() для получения текста элемента.