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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

Q&A

解決済

1回答

826閲覧

jqueryを使用したリスト絞り込み機能を作成したい

wakachanman

総合スコア2

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

1グッド

1クリップ

投稿2023/04/05 16:31

実現したいこと

ここに実現したいことを箇条書きで書いてください。
<select name="datestart" id="datestart">
<input type="date" id="datestart" class="datestart" min="2021-04-01" max="2022-03-31">
</select>

<select name="dateend" id="dateend">
<input type="date" id="dateend" class="dateend" min="2021-04-01" max="2022-03-31">
</select>

上記のselectタグを利用して、数あるliタグの中から、<li class="item" data-accident="2021-05-21”>を表示させるような絞り込み機能をjqueryを使用して作成したい

前提

ここに質問の内容を詳しく書いてください。
<select name="datestart" id="datestart">
<input type="date" id="datestart" class="datestart" min="2021-04-01" max="2022-03-31">
</select>

<select name="dateend" id="dateend">
<input type="date" id="dateend" class="dateend" min="2021-04-01" max="2022-03-31">
</select>

上記のselectタグを利用して、数あるliタグの中から、<li class="item" data-accident="2021-05-21”>を表示させるような絞り込み機能をjqueryを使用して、
以下のように実装するも絞り込みができません。
jqueryで絞り込みできるような実装方法があれば、ご教示頂けますと助かります。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

HTML <select name="datestart" id="datestart"> <input type="date" id="datestart" class="datestart" min="2021-04-01" max="2022-03-31"> </select> 〜 <select name="dateend" id="dateend"> <input type="date" id="dateend" class="dateend" min="2021-04-01" max="2022-03-31"> </select> <ul id="list"> <li class="item" data-accident="2021-05-21" data-time="3時" data-color="blue" data-sizesecond="medium" data-sizethird="large" data-filter="りんご">Item 1</li> <li class="item" data-accident="2021-08-11" data-color="red" data-size="large" data-filter="">Item 2</li> <li class="item" data-accident="2021-06-18" data-color="blue" data-size="small" data-filter="">Item 3</li> <li class="item" data-accident="2021-10-13" data-color="green" data-size="medium" data-filter="">Item 4</li> </ul> ソースコード ```jquery $('#datestart, #dateend').on('change', function() { // 開始日・終了日を取得 var start = $('#datestart').val(); var end = $('#dateend').val(); // すべてのアイテムを非表示にする $('.item').hide(); // 開始日・終了日の範囲内のアイテムを表示する $('.item').each(function() { var date = $(this).data('accident'); if (date >= start && date <= end) { $(this).show(); } }); }); ### 試したこと ①startdateより日付が小さかったら、表示しない。endDateよりも日付の値が大きかったら、表示しない。  といったコードを実装→絞り込みできず items.each(function() { var accidentDate = $(this).data('accident'); if (accidentDate < startDate || accidentDate > endDate){ $(this).hide(); } else { $(this).show(); } }); }); ②data-accidentの値を日付型にするために、『var date = new Date("2021-05-21"); $("#data-accident").val(date.getFullYear() + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + ("0" + date.getDate()).slice(-2));』を 『$('#datestart, #dateend').on('change', function() {』の1行下に入力するも、絞り込みできず ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。 jquery3.6.3を使用
shinoharat👍を押しています

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

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

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

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

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

m.ts10806

2023/04/05 22:18

マークダウンのcodeが後半の本文喰ってしまってるので調整してください。 「できない」ではなく「起きていること」を確認してください。 例えば。 ・各条件式の評価結果のtrue/falseを個別で ・どこを通っているか 意図した場所を通っているかデバッグ ・エラーが起きているかどうか
guest

回答1

0

ベストアンサー

原因

HTML が間違っているので、 javascript で start および end を取得できない状態です。

  • select 要素の中に記述できるのは option または optgroup だけです。input を入れるのは間違ってます。
  • select 要素と input 要素に同じ id が設定されていますが、これもおかしいです。id は一意でなければなりません。

修正方法

select を消して、input だけにします。

html

1 <input type="date" id="datestart" class="datestart" min="2021-04-01" max="2022-03-31"> 23 <input type="date" id="dateend" class="dateend" min="2021-04-01" max="2022-03-31">

javascript は今のままでも動作すると思いますが、開始日と終了日を両方指定しなければ検索できない(片方だけ指定すると検索結果0件になる)ので少し不便です。
以下のように変数のデフォルト値を指定すれば、開始日のみ or 終了日のみ での検索も出来るようになります。

diff

1 $('#datestart, #dateend').on('change', function() { 2 // 開始日・終了日を取得 3- var start = $('#datestart').val(); 4- var end = $('#dateend').val(); 5+ var start = $('#datestart').val() || '0000-01-01'; 6+ var end = $('#dateend').val() || '9999-12-31'; 7 8 // すべてのアイテムを非表示にする 9 $('.item').hide(); 10 11 // 開始日・終了日の範囲内のアイテムを表示する 12 $('.item').each(function() { 13 var date = $(this).data('accident'); 14 if (date >= start && date <= end) { 15 $(this).show(); 16 } 17 }); 18 });

投稿2023/04/06 01:14

shinoharat

総合スコア1685

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

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

wakachanman

2023/04/06 01:33

ありがとうございました。 修正後、日付で絞り込むことに成功しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問