
WEBページ内にFAQコーナーを作っています。
下記のようにプルダウン式で質問部分(Q.)のみを表示させ、回答部分(A.)は非表示にしているのですが
ここに検索機能を掛け合わせて、Q.もしくはA.にヒットする文字列があった場合、
もとのFAQのレイアウトデザインを生かしたまま、ヒットする文字列のあるQ&Aのみを表示させるには
どのような検索スクリプト、および「search-result」部分のコードを書けばよいのか教えていただけないでしょうか。
とりあえず、現状下記のように記述しているのですが、まずはサーチ機能が走りません。
(当方javaScriptは全然学んでおらず、いろいろなサイトからつぎはぎでコードを持ってきては繋げているので、いらないものが残り、必要なものが欠けている頓珍漢なコードなんだろうと思います 汗)
<style>
/*-------- search box ----------*/
.search-area input[type="text"] {
padding: 5px 5px 3px;
font-size: 16px;
border: 1px solid #D6D6D6;
}
.search-area input[type="text"]:focus {
background: #F9F9F9;
}
.hit-num__text span {
font-weight: bold;
}
#search-result__list {
}
#search-result__list span {
display: inline-block;
margin-right: 15px;
padding: 5px;
background: #F2F2F2;
}
.target-area .hidden,
{
display: none;
}
/*-------- FAQ アコーディオンメニュー --------*/
.tble_FAQ {
margin: 30px auto; counter-reset: numFaq;
}
.FAQ_body + .FAQ_title {
margin-top: 5px;
}
.FAQ_btn {
position: relative; display: block;
width: 100%; padding: 10px 60px 10px 15px; text-align: left;
background-color: #8f7e68; color: #fff; font-size: 16px;
border: 2px solid #8f7e68;
cursor: pointer; transition: .25s;
}
.FAQ_btn:before {
display: inline-block; float: left; margin: 0 10px 10px 0; width: 30px; background: tan;
padding: 3px; text-align: center;
line-height: 30px; font-size: 18px; font-family: sans-serif; color: white; font-weight: 800;
counter-increment: numFaq;
content: "Q" counter(numFaq) ".";
}
.FAQ_btn:after {
content: '+'; position: absolute; display: block;
top: 10px; right: 24px; font-size: 24px; font-family: sans-serif; font-weight: 1200; line-height: 30px;
}
.FAQ_btn:focus,
.FAQ_btn:hover {
background-color: #fff;
color: #8f7e68;
}
.FAQ_btn--active::after {
content: none;
}
.FAQ_body {
display: none;
padding: 14px;
border: 1px solid #ddd;
}
.FAQ_body > *:last-child {
margin-bottom: 0;
}
.FAQ_body--active {
display: block;
}
.FAQ_text {
margin-bottom: 20px;
font-size: 1.6rem;
}
</style>
<!--検索窓-->
<div class="search-area">
<form onsubmit="return false;">
<input type="text" id="search-text" placeholder="検索ワードを入力">
</form>
<div class="search-result">
<div class="search-result__hit-num"></div>
<div id="search-result__list"></div>
</div>
</div>
<!--検索窓のスクリプト-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.1 …
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-ea …
<script>
// 検索ボックス
$(function () {
searchWord = function(){
var searchText = $(this).val(), // 検索ボックスに入力された値
targetText;
$('.target-area td,dd').each(function() {
targetText = $(this).text();
// 検索対象となるリストに入力された文字列が存在するかどうかを判断
if (targetText.indexOf(searchText) != -1) {
$(this).removeClass('hidden');
} else {
$(this).addClass('hidden');
}
});
};
// searchWordの実行
$('#search-text').on('input', searchWord);
});
<script>//FAQプルダウンのscript
$(document).ready(function () {
$(".FAQ_btn").on("click", function(){
$(this).toggleClass("FAQ_btn--active");
$(this).parent("dt").next().toggleClass("FAQ_body--active");
});
});
</script>
<div class="target-area tble_FAQ ">
<dl>
<dt class="FAQ_title">
<button class="FAQ_btn" type="button">あなたの好きな果物は</button>
</dt>
<dd class="FAQ_body">
<p class="FAQ_text">
リンゴとバナナ
</p>
</dd>
<dt class="FAQ_title">
<button class="FAQ_btn" type="button">あなたの好きな料理は</button>
</dt>
<dd class="FAQ_body">
<p class="FAQ_text">
リンゴパイ、ピザ、魚
</p>
</dd>
<dt class="FAQ_title">
<button class="FAQ_btn" type="button">あなたのペットはなんですか</button>
</dt>
<dd class="FAQ_body">
<p class="FAQ_text">
金魚
</p>
</dd>
</dl>
</div>
No.2ベストアンサー
- 回答日時:
こんばんは
複雑に作ってあるのでよくわかりませんけれど・・・
『検索ワードを含むdt、dd要素以外にはhiddenクラスを設定する』
ということで良いのでしょうかね。
いろいろありそうですが、以下のようにすることでとりあえずは動作すると思います。
※ inputイベントだとうるさいので、changeに変えてあります。
※ スクリプトの位置はご提示の位置のままと想定しています。
※ hiddenクラスを操作しているだけなので、開閉状態はそのままです。
<script>
// 検索ボックス
$('.search-area input').on('change', function() {
const searchText = this.value;
$('.tble_FAQ dt').each( function() {
const list = $(this).add($(this).next('dd'));
const f = list.text().indexOf(searchText)<0;
list[f?'addClass':'removeClass']('hidden');
});
});
</script>
ありがとうございます!
「dt」の中だけでなく「dd」の中身も検索対象にしたかったので、下記のようにしてみました。
// 検索ボックス
$('.search-area input').on('change', function() {
const searchText = this.value;
$('.tble_FAQ dt,dd').each( function() {
const list = $(this).add($(this).next('dd'));
const f = list.text().indexOf(searchText)<0;
list[f?'addClass':'removeClass']('hidden');
});
});
また、別のところから持ってきていたために、2つに分けて書いていた、検索ボックスのスクリプトと、プルダウンのスクリプトは、ひとまとめにしました。(そういう書き方からよくわかっていなかったもので・・・)
でもって、教えていただいたスクリプトが「何をしているのか」については第1回答者さんが教えてくれたサイトなど見つつ、考えてみます。
htmlとCSSのみしか分かっておらず、JavaScriptをたまに使う必要に迫られたときは丸っとコピー(最低限のアレンジ)、でその場しのぎをしていたので、そろそろもう少し「わかる」ようにがんばります。
No.1
- 回答日時:
> .target-area .hidden, {
構文エラーです
セレクター構文について勉強しましょう
https://developer.mozilla.org/ja/docs/Web/CSS/Se …
> $('.target-area td,dd').each(
要素名は td ではなく dt ではないでしょうか?
ご提示の構造ですと dt と dd は一体のはずなので、ここは dt だけで検索しましょう
> targetText.indexOf(searchText)
dt だけで検索するので targetText には隣接する要素の dd の内容を足し合わせましょう
参考)
https://api.jquery.com/next/
> $(this).removeClass('hidden');
dt に隣接する要素の dd も一緒に書式を付けましょう
参考)
https://developer.mozilla.org/ja/docs/Web/CSS/Ad …
> 「search-result」部分
よくわかりませんが、関数 searchWord の結果から統計値を取り、表示しては如何でしょうか
ありがとうございます。参考になるページの紹介、勉強になります。
まずは読んで試してみて、わからなかったら、またこちらに質問いたします。。。まだまだ道は遠い感じです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- PHP 日付と年月日を選択するコードを書いているのですが、セレクトボックスの中に、「曜日」を表示させたいので 3 2021/12/10 09:20
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript javascript ループがうごかない 2 2021/10/25 16:19
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レイヤーの上下関係
-
Google マップ でKMLの情報が正...
-
jQueryで特定のcssプロパティの...
-
Galleriffic のレイアウトについて
-
ECサイトのリクエストパラメー...
-
最初の内容だけは、あらかじめ...
-
iframe内のスクリプトを親から3...
-
jQueryのSlickで矢印アイコンが...
-
jQueryでのロールオーバー処理
-
ブラウザの表示について
-
JavaScriptでCSSの変更
-
HTML5でのgoogle map api v3の
-
jQueryサンプルを使用したギャ...
-
【HP作成】 移動できる画像に...
-
JavaScriptのdiv.style属性の変...
-
javascriptで外部cssの値の変更
-
リンク付きスライドショーの不...
-
CSSのJavaScript参照
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
折りたたみを全て開いて別ペー...
-
確認ダイアログを次からは表示...
-
javascriptで複数の表示・非表...
-
特定の条件のHTML要素を一括で...
-
改行をしたいが、<br>と...
-
CSSでreadonlyの機能はあり...
-
macかwinか判別しスタイルシー...
-
SITEINFOの書き方について
-
ブラウザの表示領域から高さを...
-
vml フォントの大きさ変更
-
フォームで「パスワード(確認...
-
【JavaScript】検索がヒットし...
-
タイプライタ風の文字を真ん中...
-
jqueryを使ったスムーススクロ...
-
jQueryのCSSで値に変数を使う方法
-
webサイトに動画をはりつけ、ク...
-
年月日時分を指定してCSSを切り...
-
時間帯によってclass名を変更し...
-
2回目以降のページロード時には...
-
ブログパーツをレスポンシブ化...
おすすめ情報