【JavaScript 】シンプルな絞り込みフィルター(リスト)の作り方

【JavaScript 】シンプルな絞り込みフィルター(リスト)の作り方

Webサイトで特定のカテゴリのコンテンツを表示・非表示する「絞り込み(フィルター)リスト」は、ユーザーの利便性を向上させる重要な機能の一つです。本記事では、jQueryを使って、クリックするだけでコンテンツを切り替えられるシンプルなフィルター機能を作成します。

完成イメージ

「A」「B」「C」のボタンをクリックすると、それぞれ対応するコンテンツのみが表示される仕組みです。「ALL」をクリックするとすべてのコンテンツが表示されます。

HTMLの構成

<ul class="filter-nav">
  <li class="filter-nav__item show" data-group="">ALL</li>
  <li class="filter-nav__item" data-group="a">A</li>
  <li class="filter-nav__item" data-group="b">B</li>
  <li class="filter-nav__item" data-group="c">C</li>
</ul>
<ul class="filter-contents">
  <li class="filter-contents__item" data-group="a">Aの中身です</li>
  <li class="filter-contents__item" data-group="b">Bの中身です</li>
  <li class="filter-contents__item" data-group="c">Cの中身です</li>
</ul>

各ボタン(filter-nav__item)には data-group 属性を付与し、絞り込みの対象となるコンテンツと紐付けています。

CSSの適用

.show {
  display: block;
}
.hide {
  display: none;
}
.filter-nav__item {
  cursor: pointer;
}
.filter-nav__item.show {
  cursor: default;
}

/* レイアウト調整 */
.filter-nav,
.filter-contents {
  width: 90%;
  max-width: 500px;
  margin: 0 auto;
}
.filter-nav {
  display: flex;
  margin-block: 30px 10px;
}
.filter-nav li {
  flex: 1;
  border: 1px solid #000;
  text-align: center;
  padding: 10px 0;
  font-weight: bold;
}
.filter-nav li:not(:last-child) {
  margin-right: 10px;
}
.filter-nav li.show {
  background: #000;
  color: #fff;
}
.filter-contents {
  border: 1px solid #000;
  padding: 10px;
}

jQueryでの動作実装

var filterNavItem = '.filter-nav__item';   // 絞り込む項目名
var filterContentsItem = '.filter-contents__item';       // 絞り込み対象のコンテンツ
var hideClass = 'hide';         // 絞り込み対象外のclass
var showClass = 'show';     // 選択中のclass

$(function() {
	$(filterNavItem).on('click', function() {
		$(filterNavItem).removeClass(showClass);
		var group = $(this).addClass(showClass).data('group');
		search_filter(group);
	});
});

function search_filter(group) {
	$(filterContentsItem).removeClass(hideClass);
	if(group === '') {
		return;
	}
	for (var i = 0; i < $(filterContentsItem).length; i++) {
		var itemData = $(filterContentsItem).eq(i).data('group');
		if(itemData !== group) {
			$(filterContentsItem).eq(i).addClass(hideClass);
		}
	}
}

解説

  • クリックイベントの設定
    • .filter-nav__item がクリックされると、すべてのボタンから show クラスを削除し、クリックされたボタンに show クラスを追加します。
  • 選択されたカテゴリに応じたフィルタリング
    • search_filter(group) 関数を実行し、選択された data-group の値に一致しないコンテンツに hide クラスを付与して非表示にします。
  • ALLボタンの動作
    • data-group="" が選択された場合は、すべてのコンテンツを表示します。

まとめ

今回は jQuery を使った簡単な絞り込みリストの作成方法を解説しました。特定のカテゴリのみを表示することで、コンテンツの整理がしやすくなります。

より高度な機能を追加したい場合は、以下のような発展的な実装も考えられます。

  • アニメーションの追加fadeIn / fadeOut
  • 複数条件のフィルタリング
  • 検索ボックスとの連携

カスタマイズ次第で、さらに便利なフィルター機能を作ることができます。ぜひ試してみてください!

この記事をシェアする

どなたでもコメントや質問をどうぞ

スパム対策のため、承認作業を行うまでは表示されません。ご了承ください。

CAPTCHA