リストを絞り込む処理を実装してみる

リスト表示している要素をJavaScriptを使って動的に絞り込む処理を実装してみます。

サンプルコード

選択項目から1つを選択すると、それに関連するリストのみの表示に絞り込みます。

HTML

<ul class="searchList">
	<li><a href="#all">全て</a></li>
	<li><a href="#dog">イヌ</a></li>
	<li><a href="#cat">ネコ</a></li>
	<li><a href="#monkey">サル</a></li>
	<li><a href="#dolphin">イルカ</a></li>
	<li><a href="#jellyfish">クラゲ</a></li>
	<li><a href="#penguin">ペンギン</a></li>
	<li><a href="#turtle">カメ</a></li>
	<li><a href="#redstart">ジョウビタキ</a></li>
	<li><a href="#myna">九官鳥</a></li>
	<li><a href="#butterfly">蝶</a></li>
	<li><a href="#crocodile">ワニ</a></li>
</ul>

<ul class="list">
	<li class="all dolphin">
		<img src="01.jpg" width="240" height="155">
		<p>名前:<span class="name">イルカ</span></p>
	</li>
	<li class="all jellyfish">
		<img src="02.jpg" width="240" height="155">
		<p>名前:<span class="name">クラゲ</span></p>
	</li>
	・
	・
	・
	<li class="all dog">
		<img src="14.jpg" width="240" height="155">
		<p>名前:<span class="name">イヌ</span></p>
	</li>
</ul>

JavaScript

$(function() {
	var lists = $('.list li');
	$(document).on('click', '.searchList a', function() {
		// 絞り込みの対象を取得
		var target = $(this).attr('href').replace('#', '');
		lists.each(function(e) {
			// 絞り込み対象の場合は表示
			if($(this).hasClass(target)) {
				$(this).show();
			// 絞り込み対象でない場合は非表示
			} else {
				$(this).hide();
			}
		});
		return false;
	});
});

リスト表示の要素の絞り込みのデモページ
 

サンプルコード2

絞り込み内容を複数選択できるようにしてみます。

HTML

<div class="serchBox">
	<select name="type">
		<option value="">種類を選択</option>
		<option value="mammals">哺乳類</option>
		<option value="reptiles">爬虫類</option>
		<option value="birds">鳥類</option>
		<option value="other">その他</option>
	</select>
	<select name="live">
		<option value="">生活を選択</option>
		<option value="water">水中</option>
		<option value="land">陸上</option>
		<option value="water-and-land">水中と陸上</option>
		<option value="sky">空</option>
	</select>
	<select name="color">
		<option value="">色を選択</option>
		<option value="black">黒系</option>
		<option value="white">白系</option>
		<option value="green">緑系</option>
		<option value="brown">茶系</option>
	</select>
	<select name="size">
		<option value="">大きさを選択</option>
		<option value="small">小さい</option>
		<option value="middle">中くらい</option>
		<option value="large">大きい</option>
	</select>
	<select name="name">
		<option value="">名前を選択</option>
		<option value="dog">イヌ</option>
		<option value="cat">ネコ</option>
		<option value="monkey">サル</option>
		<option value="dolphin">イルカ</option>
		<option value="jellyfish">クラゲ</option>
		<option value="penguin">ペンギン</option>
		<option value="turtle">カメ</option>
		<option value="redstart">ジョウビタキ</option>
		<option value="myna">九官鳥</option>
		<option value="butterfly">蝶</option>
		<option value="crocodile">ワニ</option>
	</select>
</div>

<ul class="list">
	<li>
		<img src="01.jpg" width="240" height="155">
		<p class="name">名前:<span class="dolphin">イルカ</span></p>
		<p class="type">種類:<span class="mammals">哺乳類</span></p>
		<p class="live">生活:<span class="water">水中</span></p>
		<p class="color">色:<span class="black">黒系</span></p>
		<p class="size">大きさ:<span class="large">大きい</span></p>
	</li>
	<li>
		<img src="02.jpg" width="240" height="155">
		<p class="name">名前:<span class="jellyfish">クラゲ</span></p>
		<p class="type">種類:<span class="other">その他</span></p>
		<p class="live">生活:<span class="water">水中</span></p>
		<p class="color">色:<span class="white">白系</span></p>
		<p class="size">大きさ:<span class="small">小さい</span></p>
	</li>
	・
	・
	・
	<li>
		<img src="14.jpg" width="240" height="155">
		<p class="name">名前:<span class="dog">イヌ</span></p>
		<p class="type">種類:<span class="mammals">哺乳類</span></p>
		<p class="live">生活:<span class="land">陸上</span></p>
		<p class="color">色:<span class="brown">茶系</span></p>
		<p class="size">大きさ:<span class="middle">中くらい</span></p>
	</li>
</ul>

JavaScript

$(function() {
	var lists = $('.list li');
	$(document).on('change', '.serchBox select', function() {
		lists.show();
		for (var i = 0; i < $('.serchBox select').length; i++) {
			// 絞り込みの項目を取得
			var item = $('.serchBox select').eq(i).attr('name');
			// 絞り込みの対象を取得
			var target = $('.serchBox select').eq(i).val();

			if(target != '') {
				for (var j = 0; j < lists.length; j++) {
					// 絞り込み対象でない場合は非表示
					if(!lists.eq(j).find('.' + item).find('span').hasClass(target)) {
						lists.eq(j).hide();
					}
				};
			}
		};
	});
});

複数項目での絞り込みのデモページ
今回はHTML内に要素として表示させていますが、data属性を使ったりしてもよいと思います。
 

このエントリーをはてなブックマークに追加

関連記事

56件のコメント

  1. pome より:

    こちらのサイトいつも利用しています。
    ありがとうございます。

    https://cly7796.net/blog/sample/implement-the-process-of-narrowing-down-the-list/index4.html

    ↑のページで
    表示されている各要素に「current」などのクラスを付与するには
    どうしたらいいかわからず困っています。

    ご教示いただけると幸いです。

  2. yuppa より:

    初めまして。
    こちらの絞り込み検索の件、
    他に何記事も調べましたが、こちらのサイトがとてもわかりやすいです。
    本当にありがとうございます。

    以下質問です。
    始めから全件表示されている状態で
    検索ボタン・リセットボタンを設置し、
    更にリスト下部にページネーションを
    つけるにはどうすればいいでしょうか?
    ページネーションプラグインを併用したりしましたが
    うまくいきません。。

    お忙しい中大変恐れ入りますが、ご教示いただけますと幸いです。
    よろしくお願いいたします。

  3. waidi より:

    はじめまして。いつも参考にさせて頂いております。
    質問なのですが、
    何も選択していない状態での表示数の指定と
    選択した状態での表示数の指定を統一し、
    もっと見るで指定数ずつ増やしたいと考えています。

    この時選択を変更すると8つ表示に戻したいです。

    例)・何も選択していない状態での表示数を8つ、選択した状態での表示数を8つ
    ・上記どちらの状態でも、もっと見るで4つずつ表示
    ・選択を変更すると初期表示数の8つに戻したい

    このような表示の方法はありますでしょうか。
    お忙しいところ恐縮ですが、よろしくお願いします。

  4. Beginner より:

    はじめまして。
    こちらの記事を参考にさせていただいてます。

    サンプルコード2を参考にプルダウンメニューでの絞り込みを実装しているのですが、
    他のページからリンクでジャンプしてきた時に
    プルダウンメニューのいずれかを選択した状態で開かせたいのですが上手くいきません。

    やりたいことは8番さんの質問と同じようなことなのですが、
    初期選択したい項目にselectedを追加しておくのではなく
    URLのアンカーでプルダウンメニューの選択項目を指定したいのですが
    そのようなことはできますでしょうか?
    お忙しいところ恐縮ですが、どうぞよろしくお願いいたします。

    • cly7796.net より:

      Beginnerさん
      コメントありがとうございます。

      アンカーではなくURLにパラメータを付けて開く形ですが、こちらで問題なさそうでしょうか。
      https://cly7796.net/blog/sample/implement-the-process-of-narrowing-down-the-list/index16.html?name=dog&color=black

      • Beginner より:

        cly7796.netさま

        サンプル作成ありがとうございます。まさに求めていたとおりのものです!
        ただ、URLにパラメータを付けずに開いたときに絞り込みが出来なくなったのですが
        他のサンプルのjsを続けて追加すると動きました。
        この方法で間違いないでしょうか?
        お忙しいところ申し訳ありませんが、ご教授いただけますと幸いです。。

        • Beginner より:

          cly7796.netさま
          度々申し訳ございません。
          jquery3系で動かそうとする場合はどこを調整すれば良いのでしょうか?
          質問ばかりで申し訳ないのですがどうぞよろしくお願いいたします。

          • Beginner より:

            cly7796.netさま
            いろいろ質問させていただきましたが自己解決いたしました。
            もし回答を考えてくださっていたら申し訳ありません。
            こちらのサイトはサンプルも解説もとても分かりやすく、参考・勉強になります。
            ありがとうございました。

          • cly7796.net より:

            Beginnerさん
            解決されたようでよかったです。

            一応、以前のサンプルにパラメータがない場合の対応を追加しました。
            https://cly7796.net/blog/sample/implement-the-process-of-narrowing-down-the-list/index16.html

  5. szsr より:

    初めまして。
    参考にさせていただいてます。
    質問なのですが、選択項目から1つを選択した時にでる項目たちが表示された時の動きを滑らかにしたいのですが、どうすればよろしいでしょうか。
    お忙しい所申し訳ありません、よろしくお願いいたします。

  6. 松本 より:

    はじめまして、いつも参考にさせていただきます。検索のボタンを押すと、検索結果のページを別のページで表示させるようにしたいのですが、その場合のプログラムが組めなくて困っています。お忙しいところすみませんが、お手をお借りできたら幸いです。

    • cly7796.net より:

      松本さん
      コメントありがとうございます。
      こちらは同一ページ内で一覧表示を絞り込む記事になりますので、別のページで検索結果を表示するということであれば別の内容になりますね。

  7. mariko より:

    初めまして。
    とても参考にさせていただいております!
    サンプルコード2と似たような依頼があり助かってのですが、さらに「○○件」と件数表示して欲しいと言われ、困っています。
    表示方法を教えていただけないでしょうか。

  8. neko より:

    やりたいことに近いこちらのページを参考とさせていただいており、大変助かっております。
    ありがとうございます。
    勉強不足ですみませんが、ご教示いただきたい点があります。
    下記で該当しないチェックボックスが非表示になりますが、表示はさせたままで非活性にする方法はありますでしょうか。
    https://cly7796.net/blog/sample/implement-the-process-of-narrowing-down-the-list/index7.html
    お忙しいところ恐縮ですが、どうぞよろしくお願い致します。

  9. ノア より:

    はじめまして。このサイトをとても参考にさせていただいております。

    サンプルコード2を参考に、複数のセレクタで絞り込むコードを作っています。
    しかしセレクタを変更すると、リストの項目がすべて非表示になってしまい、セレクタを全てに戻しても表示されません。

    もしかしたら

    分野を選択
    絵画
    音楽
    彫刻
    書道

    と選択肢があった場合

    分野:絵画・音楽

    のように複数の分野を指定しているせいかもしれないと思っています。
    もしそれが原因だとしたら、このような場合にclassに picture または music のいずれかが入力されている場合に表示させるにはどうしたら良いでしょうか?
    ご教授いただけますと幸いです。

    何卒宜しくお願い致します。

  10. onionion より:

    index9.html
    を参考にチェックボックス、ラジオボタン、テキスト入力で選択後、検索(リセット)で隠れていたテーブルの該当行のみ表示、なければ該当がないと、表示したいのですが何か良いサンプルコードがありましたらご教示の程お願い申し上げます。

  11. yuuka より:

    はじめまして。このサイトをとても参考にさせていただいております。
    JavaScript初心者です。
    個人アプリの開発で、はいかいいえの選択をするラジオボタンを5つ作り
    32通りの選択肢から1つの結果を出そうとしているのですが、イベントの発火がうまく行かず
    止まっています。お力を貸していただきたいです。
    上記のようなリストを絞り込む処理に検索のボタンを押すと一つの結果が表示される
    実装にしたいのですがJavaScriptのコードの書き方が全然わかりません。
    上記のアプリの場合で構いませんのでJavaScriptのコードの参考例を載せていただけないでしょうか。
    お手数ですがよろしくお願いします。

  12. design.380 より:

    はじめまして。
    こちらの記事を参考にさせていただいております。

    現在、プルダウンメニューでの絞り込みを実装してるのですが、
    ページ読み込み時にプルダウンメニューのいずれかを選択した状態で
    表示させたいのですが、そのようなことは可能でしょうか。

    実装方法をご教授いただけますと幸いです。
    お忙しいとは思いますが、何卒宜しくお願い致します。

  13. toru より:

    はじめまして。
    こちら参考にさせていただきました。
    おおよそ想定通りにできたのですが、
    以下の2点で躓いています。
    ・選択リストを操作するまでは、一覧を非表示にしたい
    ・該当するリストがない場合は、「非対応です」と表示したい
    何かいい方法がございましたらぜひご教授ください。
    よろしくお願いいたします。

  14. K より:

    はじめまして。
    こちら参考にさせていただきたいのですが、1点分からないことがあります。
    要素を絞り込んだ際に、たとえば4つずつ表示して残りの分は「もっと見る」でさらに4つずつ表示していくにはどうすればよいのでしょうか?

    全てのタブでは正常に動作するのですが、絞り込みを行うと正常に動作しなくなってしまいます。

    ご教授いただけますと幸いです。
    よろしくお願い致します。

    • cly7796.net より:

      Kさん
      コメントありがとうございます。
      正常に動作しないのは、絞り込みで非表示にした要素も「もっと見る」の対象になっているためかと思います。
      サンプル作ってみましたが、以下のような動作で問題ないでしょうか。
      https://cly7796.net/blog/sample/implement-the-process-of-narrowing-down-the-list/index8.html
      元のサンプルは絞り込み対象外の要素を非表示にしているだけだったので、絞り込み対象の要素に対してclassを追加して「もっと見る」を実装しています。
      現在テストで2件ずつ表示していますので、件数を変更したい場合はjsファイルの1行目の値を変更してください。

  15. shiratamaanmitsu より:

    初めまして、色々と検索してたどり着きました。

    https://cly7796.net/blog/sample/implement-the-process-of-narrowing-down-the-list/index5.html
    上記サンプルにて
    種類を選択すると、名前一覧のチェックボックスも選択によって
    表示が消えたりできないかと試行錯誤しているのですがうまくいきません。

    ご教授願えればと思いコメントしてみました。
    よろしくお願いします。

  16. よっしー より:

    始めまして。
    こちらの記事を参考にさせていただいております。
    何点かわからない点がありますので、ご教授いただけると助かります。
    現在、classではなくデータ属性を
    使って、絞り込みを作成できないか模索しているのですが、
    知識が浅いため、やり方をご教授いただけますと幸いです。

    何卒宜しくお願い致します。

  17. yoloyolo より:

    はじめまして。
    参考にさせて頂きました。ありがとうございます。
    初心者で、初歩的な質問かもしれませんが、分からないことがある為教えて頂けると幸いです。
    htmlをそのまま張り付けたのですが、絞り込みの画像や情報が縦に並んでしまいます。
    デモページのように横に4つ、またその下に4つというように、きれいに並べるにはどうすればいいですか?
    ソースを見てみたのですが、CSSを読み込んでいるのでしょうか?
    勉強不足ですみません。ご教授よろしくお願いいたします。

  18. aya より:

    はじめまして。
    探し求めていたスクリプトで大変助かります。
    すみません。こちら↓のサンプルにリセットボタンを付ける方法を教えていただけないでしょうか。
    https://cly7796.net/blog/sample/implement-the-process-of-narrowing-down-the-list/index3.html

  19. さち より:

    昨日、質問をさせていただきましたが解決しました。
    もし、回答を考えていただいていましたらすみません。

    • cly7796.net より:

      さちさん
      コメントありがとうございます。
      返信が遅くなってしまい申し訳ありません。
      解決されたようでよかったです。

  20. さち より:

    はじめまして。
    data属性を使った方法を教えていただきたいです。

  21. さち より:

    はじめまして。
    参考にさせていただいてます。
    最後に「今回はHTML内に要素として表示させていますが、data属性を使ったりしてもよいと思います。」
    とあります。
    下記のようなリストの書き方にした場合、どのように変更したらよいでしょうか。

    お忙しいところ、申し訳ありませんが、ご教授願います。

  22. カナぴす より:

    はじめまして。どの記事を見ても初心者にはわかりずらく、こちらのサイトは大変わかりやすく助かっております。何点かわからない点がありますので、ご教授いただけると助かります。

    検索ボタンを付け、ボタンを押すと同じページに検索結果が出てくるようにしたいと考えております。

    お忙しいところ恐縮ですが、よろしくお願いいたしますm(__)m

  23. kyoko より:

    はじめまして。大変参考になり活用させて頂きたいのですが、1点教えていただけないでしょうか。
    複数項目での絞り込みにチェックボックスも追加したい場合のJS記述はどのようになるでしょうか?

    HTMLは、

    AAAを選択
    AAA-1
    AAA-2
    AAA-3

    BBBを選択
    BBB-1
    BBB-2
    BBB-3

    CCC-1
    CCC-2
    CCC-3

    のような感じです。

    初心者なものでご教授いただけると幸いです。

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2022年11月
 12345
6789101112
13141516171819
20212223242526
27282930