【jQuery】.lengthプロパティ完全ガイド|要素数・存在確認・配列カウントまで

【jQuery】.lengthプロパティで配列、要素、文字列のカウントを行う jQuery

jQueryオブジェクトの .length プロパティは、選択された要素の数を返します。要素の存在確認・リストのカウント・条件分岐など、日常的なjQuery操作に欠かせない知識です。本記事では .length の基本から実用パターンまで解説します。

この記事でわかること

  • .lengthで要素の数を取得する方法
  • 要素の存在確認(存在チェック)の正しい書き方
  • リスト・テーブル行のカウント方法
  • フォームのバリデーションへの応用
  • size()メソッドとの違い(非推奨)
スポンサーリンク

1. .lengthの基本

.length はjQueryオブジェクトが持つプロパティ(メソッドではない)で、該当する要素の個数を数値で返します。要素が見つからない場合は 0 を返します。

// p タグの数を取得
var count = $('p').length;
console.log(count);  // ページ内のp要素の数

// 特定クラスの要素数
var items = $('.list-item').length;

// IDが存在するか確認
if ($('#my-element').length > 0) {
  console.log('要素が存在する');
} else {
  console.log('要素が存在しない');
}

2. 要素の存在確認(存在チェック)

jQueryで要素が存在するかチェックする最も一般的な方法です。

// ◯ 正しい書き方: .length で確認
if ($('#target').length) {
  // 要素が存在する場合の処理
}

// ◯ より明示的な書き方
if ($('#target').length > 0) { ... }
if ($('#target').length !== 0) { ... }

// △ 非推奨の書き方(過去には .size() が使われていた)
// if ($('#target').size()) { ... }  // jQuery 3.0 で廃止

// × よくある間違い: jQueryオブジェクトは常にtruthy
// if ($('#target')) { ... }  // 常にtrue!NG
jQueryオブジェクトは要素なしでも truthy になる
$('#notexist') は要素が存在しなくても空のjQueryオブジェクト(truthy)を返します。if ($('#notexist')) は常にtrueになるので必ず .length で確認してください。

3. リスト・テーブル行のカウント

// リストアイテムの数
var listCount = $('ul.my-list li').length;
console.log('リスト件数: ' + listCount);

// テーブルのデータ行数(ヘッダー行を除く)
var rowCount = $('table tbody tr').length;

// チェックされているチェックボックスの数
var checkedCount = $('input[type="checkbox"]:checked').length;

// 入力済みのフィールド数
var filledCount = $('input[type="text"]').filter(function () {
  return $(this).val() !== '';
}).length;

4. フォームバリデーションへの応用

必須項目の入力チェックや選択数の制限などに .length を活用できます。

$(function () {
  $('#submit-btn').on('click', function (e) {
    var errors = 0;

    // 未入力のテキストフィールドを確認
    $('input[required]').each(function () {
      if ($(this).val() === '') {
        $(this).addClass('error');
        errors++;
      } else {
        $(this).removeClass('error');
      }
    });

    // チェックボックスが1つ以上チェックされているか
    if ($('.check-group input:checked').length === 0) {
      alert('少なくとも1つ選択してください');
      errors++;
    }

    if (errors > 0) {
      e.preventDefault();
    }
  });
});

5. .lengthを使った実用パターン集

// パターン1: 特定条件を満たす要素がある場合のみ処理
if ($('.accordion').length) {
  initAccordion();
}

// パターン2: 選択数を表示
$('input[type="checkbox"]').on('change', function () {
  var count = $('input[type="checkbox"]:checked').length;
  $('#count-display').text(count + '件選択中');
});

// パターン3: 残りスロット数の計算
var maxItems  = 5;
var current   = $('.item').length;
var remaining = maxItems - current;
console.log('残り' + remaining + '件追加できます');

// パターン4: 最後の要素かどうか確認
$('.remove-btn').on('click', function () {
  var $item = $(this).closest('.item');
  if ($('.item').length <= 1) {
    alert('最後の項目は削除できません');
    return;
  }
  $item.remove();
});

6. size()との違いと注意点

過去には .size() メソッドが .length と同等の機能を提供していましたが、jQuery 3.0で廃止されました。既存コードで .size() を見かけた場合は .length に置き換えてください。

// 廃止: jQuery 3.0以降ではエラー
// $('p').size();  // × 使用禁止

// 正しい書き方
$('p').length;  // ◯

まとめ

jQueryの .length は要素数の取得・存在確認・カウントなど多くの場面で使います。jQueryオブジェクトは空でも truthy なので、存在確認には必ず .length を使ってください。.size() は jQuery 3.0 以降廃止なので注意しましょう。

関連記事: jQueryのeach()を使ったループ処理 / jQueryのeq()で要素の順番を指定して選択する方法

よくある質問(FAQ)

Q要素の存在確認はどう書けばいいですか?
Aif ($('#target').length) が最も一般的です。if ($('#target')) はjQueryオブジェクトが常に truthy なので常にtrueになります。必ず .length を使ってください。
Q.size()と.lengthの違いは何ですか?
A機能は同じで両方とも要素数を返しますが、.size() はjQuery 3.0で廃止されました。現在は常に .length を使ってください。
Qチェックされたチェックボックスの数を取得するには?
A$('input[type="checkbox"]:checked').length で取得できます。:checked 擬似クラスで選択済みのみをフィルタリングしています。
QバニラJSで同等の処理をするには?
Adocument.querySelectorAll(".class").length で同等のカウントができます。単一要素の存在確認は document.querySelector('#id') !== null で確認します。
Q動的に追加した要素も.lengthでカウントできますか?
Aはい。.length はその時点でDOMに存在する要素を数えます。クリックのたびにカウントしたい場合はイベントハンドラー内で毎回 $('.item').length を取得してください。