質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

1回答

973閲覧

jQueryを利用した絞り込み機能の実装方法

137

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/06/21 07:58

前提・実現したいこと

jQueryを利用してhtmlページ上で絞り込み機能を実装したいと考えております。
以下参考ページを元に絞り込みだけは機能するようになったのですが、更に応用した機能を取り入れたい状況です。
参考URL : https://www.tam-tam.co.jp/tipsnote/javascript/post14636.html (1.の内容)

「ALL」「ONEMAN」「EVENT」「INSTORE」「OTHER」と5つにカテゴリ分けをし、それぞれのグループに該当する項目をクリックすると、その要素だけが表示されるという仕組みを考えているのですが、「OTHER」のみ少し他とは異なる表示方法にしたいです。

最初にページを開いた段階では「OTHER」のカテゴリに属する項目は非表示になっており、「ALL」をクリックした場合か「OTHER」をクリックした場合にのみ、「OTHER」グループに該当する項目が表示される形にしたいのです。

この場合、どのような修正を行えば上記のような動作が可能になりますでしょうか?
以下に簡素にした現在のコードを記載いたします。

該当のソースコード

——————html——————

<div class="search"> <span class="search_item is-active" data-group="">ALL</span> <span class="search_item" data-group="ONEMAN">ONEMAN</span> <span class="search_item" data-group="EVENT">EVENT</span> <span class="search_item" data-group="INSTORE">INSTORE</span> <span class="search_item" data-group="OTHER">OTHER</span> </div> <div class="list_item" data-group="EVENT">イベント1</div> <div class="list_item" data-group="EVENT">イベント2</div> <div class="list_item" data-group=“ONEMAN”>ワンマン1</div> <div class="list_item" data-group=“EVENT”>イベント3</div> <div class="list_item" data-group=“INSTORE”>インストア1</div> <div class="list_item" data-group=“EVENT”>イベント4</div> <div class="list_item" data-group=“OTHER”>アザー1</div> <div class="list_item" data-group=“ONEMAN”>ワンマン2</div>

——————CSS——————

.search_item {
display: inline-block;
padding: 3px;
cursor: pointer;
}
.search_item.is-active {
color: white;
background-color: black;
}
.is-hide {
display: none;
}

——————JS——————

var searchItem = '.search_item'; // 絞り込む項目を選択するエリア
var listItem = '.list_item'; // 絞り込み対象のアイテム
var hideClass = 'is-hide'; // 絞り込み対象外の場合に付与されるclass名
var activeClass = 'is-active'; // 選択中のグループに付与されるclass名

$(function() {
// 絞り込みを変更した時
$(searchItem).on('click', function() {

$(searchItem).removeClass(activeClass); var group = $(this).addClass(activeClass).data('group'); search_filter(group); });

});

/**

  • リストの絞り込みを行う
  • @param {String} group data属性の値

*/
function search_filter(group) {
// 非表示状態を解除
$(listItem).removeClass(hideClass);
// 値が空の場合はすべて表示
if(group === '') {
return;
}
// リスト内の各アイテムをチェック
for (var i = 0; i < $(listItem).length; i++) {
// アイテムに設定している項目を取得
var itemData = $(listItem).eq(i).data('group');
// 絞り込み対象かどうかを調べる
if(itemData !== group) {
$(listItem).eq(i).addClass(hideClass);
}
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

最初にページを開いた段階では「OTHER」のカテゴリに属する項目は非表示になっており、「ALL」をクリックした場合か「OTHER」をクリックした場合にのみ、「OTHER」グループに該当する項目が表示される形にしたいのです。

ALLに「is-active」クラスがついているのでデフォルトはALLなのですよね?
そうなるとALL時にOTHERを隠すのはロジックがおかしいです。

最初にOTHERを隠すだけなら
$('.list_item.OTHER').hide();
するだけだと思います

javascript

1<style> 2.is-active{color:red} 3</style> 4<script> 5$(function(){ 6 $('.list_item.OTHER').hide(); 7 $('.search_item').on('click',function(){ 8 $('.search_item').removeClass('is-active'); 9 $(this).addClass('is-active'); 10 $('.list_item').hide().filter($(this).data('group')).show(); 11 }); 12}); 13</script> 14 15<div class="search"> 16<span class="search_item is-active" data-group="*">ALL</span> 17<span class="search_item" data-group=".ONEMAN">ONEMAN</span> 18<span class="search_item" data-group=".EVENT">EVENT</span> 19<span class="search_item" data-group=".INSTORE">INSTORE</span> 20<span class="search_item" data-group=".OTHER">OTHER</span> 21</div> 22 23<div class="list_item EVENT">イベント1</div> 24<div class="list_item EVENT">イベント2</div> 25<div class="list_item ONEMAN">ワンマン1</div> 26<div class="list_item EVENT">イベント3</div> 27<div class="list_item INSTORE">インストア1</div> 28<div class="list_item EVENT">イベント4</div> 29<div class="list_item OTHER">アザー1</div> 30<div class="list_item ONEMAN">ワンマン2</div>

投稿2019/06/21 09:30

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問