前提・実現したいこと
FAQページにて、ページ内の検索機能を実装したいです。
イメージとしては、検索ボックスに検索したいワードを入れたら、すぐ下に検索結果が表示される感じです。
発生している問題・エラーメッセージ
https://www.tam-tam.co.jp/tipsnote/javascript/post11315.html
上記URLを参考に実装してみたのですが、
「dt」か「dd」どちらかの要素しか検索結果に表示させることができませんでした。
検索結果の「dt」に紐付く、「dd」も一緒に結果として表示したいです。
下のソースコードでいうと、「赤」を検索したら、
「<h2>」要素に「赤」、「<p>」要素に「あいうえお」を格納して表示するイメージです。
該当のソースコード
js
1<script type="text/javascript"> 2 $(function () { 3 searchWord = function(){ 4 var searchResult, 5 searchText = $(this).val(), // 検索ボックスに入力された値 6 targetText, 7 hitNum; 8 9 // 検索結果を格納するための配列を用意 10 searchResult = []; 11 12 // 検索結果エリアの表示を空にする 13 $('#search-result__list').empty(); 14 $('.search-result__hit-num').empty(); 15 16 // 検索ボックスに値が入ってる場合 17 if (searchText != '') { 18 $('.target-area dt').each(function() { 19 targetText = $(this).text(); 20 21 // 検索対象となるリストに入力された文字列が存在するかどうかを判断 22 if (targetText.indexOf(searchText) != -1) { 23 // 存在する場合はそのリストのテキストを用意した配列に格納 24 searchResult.push(targetText); 25 } 26 }); 27 28 // 検索結果をページに出力 29 for (var i = 0; i < searchResult.length; i ++) { 30 $('<h2>').text(searchResult[i]).appendTo('#search-result__list'); 31 } 32 33 // ヒットの件数をページに出力 34 hitNum = '<span>検索結果</span>:' + searchResult.length + '件見つかりました。'; 35 $('.search-result__hit-num').append(hitNum); 36 } 37}; 38 39 // searchWordの実行 40 $('#search-text').on('input', searchWord); 41 }); 42</script>
html
1<div style="text-align: center;"> 2 <div class="search-area"> 3 <form> 4 <input type="text" id="search-text" placeholder="検索ワードを入力"> 5 </form> 6 <div class="search-result"> 7 <div class="search-result__hit-num"></div> 8 <div id="search-result__list"></div> 9 </div> 10 </div> 11</div> 12 13<div class="qa"> 14 <h2 id="q1">受け取りについて</h2> 15 <dl class="target-area"> 16 <dt>赤</dt> 17 <dd>あいうえお</dd> 18 19 <dt>青</dt> 20 <dd>かきくけこ</dd> 21 22 <dt>黄色</dt> 23 <dd>さしすせそ</dd> 24 </dl> 25</div>
試したこと
隣接要素を取得する$(this).next("dd")
を使えばいけそうだと思ったのですが、
うまく動作させることができませんでした…。
回答1件
あなたの回答
tips
プレビュー