jQueryの each() はDOM要素・配列・オブジェクトを繰り返し処理するためのメソッドです。本記事では .each()(jQueryオブジェクトメソッド)と $.each()(ユーティリティ関数)の違い、ループを途中で抜ける方法・バニラJSとの比較まで丁寧に解説します。
この記事でわかること
- .each()でDOM要素をループする基本
- $.each()で配列・オブジェクトをループする方法
- ループを途中でbreak(抜ける)する方法
- $(this)とelement引数の使い分け
- forEach・for ofとの使い分け
1. .each()でDOM要素をループ
jQueryオブジェクトの .each() は選択した要素を1つずつ処理します。コールバックには index(0始まりのインデックス)と element(DOM要素)が渡されます。
// 全ての li を順番に処理
$('ul li').each(function (index, element) {
console.log(index, $(this).text());
// index: 0, 1, 2...
// $(this): 現在のjQueryオブジェクト
// element: DOM要素($(element)と$(this)は同じ)
});
// 各要素にインデックスを表示
$('.card').each(function (i) {
$(this).find('.number').text(i + 1);
});
// 偶数・奇数で色分け
$('tr').each(function (i) {
if (i % 2 === 0) {
$(this).addClass('even-row');
} else {
$(this).addClass('odd-row');
}
});
2. $.each()で配列・オブジェクトをループ
$.each() はjQueryのユーティリティ関数で、配列やオブジェクトを反復処理できます。.each() がjQueryオブジェクト専用なのに対し、$.each() は任意のデータに使えます。
// 配列のループ(index, value)
var fruits = ['リンゴ', 'バナナ', 'オレンジ'];
$.each(fruits, function (index, value) {
console.log(index + ': ' + value);
// 0: リンゴ / 1: バナナ / 2: オレンジ
});
// オブジェクトのループ(key, value)
var person = { name: '田中', age: 30, city: '東京' };
$.each(person, function (key, value) {
console.log(key + ': ' + value);
// name: 田中 / age: 30 / city: 東京
});
// Ajax結果を元にリストを生成
$.ajax({ url: '/api/items' }).done(function (data) {
$.each(data, function (i, item) {
$('<li>').text(item.name).appendTo('#list');
});
});
3. ループを途中で抜ける(breakの代替)
each() の中で break は使えません。return false を返すことでjQueryのeachを中断できます。return true は continue(次の反復へ)と同じです。
$('li').each(function (i) {
if ($(this).text() === '探している値') {
console.log('見つかりました! インデックス:', i);
return false; // ← break の代わり(each全体を中断)
}
if ($(this).hasClass('skip')) {
return true; // ← continue の代わり(次の要素へスキップ)
}
// 通常の処理
console.log($(this).text());
});
4. .each()と$.each()の違いまとめ
| 比較項目 | .each() | $.each() |
|---|---|---|
| 使い方 | jQueryオブジェクトのメソッド | グローバルユーティリティ関数 |
| 対象 | DOM要素のみ | 配列・オブジェクト・DOM要素 |
| コールバック引数 | (index, element) | 配列: (index, value) / オブジェクト: (key, value) |
| this | DOM要素 | 値そのもの |
| break代替 | return false | return false |
5. バニラJSとの比較
// DOM要素のループ: forEach(バニラJS)
document.querySelectorAll('li').forEach(function (el, i) {
console.log(i, el.textContent);
});
// 配列のループ: for...of(バニラJS)
var fruits = ['リンゴ', 'バナナ'];
for (var fruit of fruits) {
console.log(fruit);
}
// オブジェクトのループ: for...in(バニラJS)
var obj = { a: 1, b: 2 };
for (var key in obj) {
console.log(key, obj[key]);
}
モダン環境ではforEach・for…ofの方がシンプル
jQueryを使う必要がない場合は
jQueryを使う必要がない場合は
forEach() や for...of の方がシンプルで可読性が高いです。jQueryのDOM操作と組み合わせる場合は .each() が便利です。6. 実用パターン集
// パターン1: フォームの全入力値を収集
var formData = {};
$('input, select, textarea').each(function () {
var name = $(this).attr('name');
if (name) formData[name] = $(this).val();
});
// パターン2: テーブルの行データを配列に変換
var rows = [];
$('table tbody tr').each(function () {
var row = [];
$(this).find('td').each(function () {
row.push($(this).text());
});
rows.push(row);
});
// パターン3: 外部リンクを自動的に新タブで開く
$('a').each(function () {
var href = $(this).attr('href');
if (href && href.startsWith('http')) {
$(this).attr({ target: '_blank', rel: 'noopener noreferrer' });
}
});
まとめ
jQueryの .each() はDOM要素のループに、$.each() は配列・オブジェクトのループに使います。ループを中断するには return false、スキップは return true です。モダン環境では forEach や for...of でも代替できます。
関連記事: jQueryのeq()で要素の順番を指定して選択する方法 / jQueryの.lengthプロパティで要素数をカウントする方法
よくある質問(FAQ)
Qeach()でbreakはできますか?
A
each() の中で break は使えません。return false を返すと break と同様にループ全体を中断できます。return true は continue と同様に次の反復へスキップします。Q.each()と$.each()はどう使い分けますか?
AjQueryオブジェクト(DOM要素)をループする場合は
.each()、配列やJavaScriptオブジェクトをループする場合は $.each() を使います。Qeach()内でelement引数と$(this)は同じですか?
A
element はDOM要素そのもので、$(this) はそれをjQueryオブジェクトにラップしたものです。jQueryのメソッドを使う場合は $(this)、バニラJSのプロパティを使う場合は element を使います。Qeach()はforEachより遅いですか?
Aわずかに
each() の方がオーバーヘッドがありますが、実用上の差はほぼありません。jQueryのDOM操作と組み合わせる場合は .each() がコードがすっきりします。Qeach()内でAjaxを実行しても順序が保証されない
AAjaxは非同期なのでeachの順序に関係なくレスポンスが返ります。順序を保証したい場合は
async/await を使うか、Ajaxを連鎖(.then())させる必要があります。

