- 首页
- 其他开发
- Jquery Bootstrap 手风琴常见问题解答
Jquery Bootstrap 手风琴常见问题解答
[英] Jquery Bootstrap Accordian FAQ Search
本文介绍了Jquery Bootstrap 手风琴常见问题解答的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在处理一个相当大的常见问题解答页面,该页面需要包含多个部分.它需要一个高效的搜索功能,我已经把一个基于以前的答案,但我'我坚持几点.
- 搜索功能不起作用 - 似乎没有选择正确的panelContainerId"
- 如何将多个手风琴 ID 组合到搜索功能中
- 如何在结果中突出显示搜索词
这是我的工作代码 - 也见下文 https://jsfiddle.net/clappertrapp/92vxzes7/71/
jQuery(document).ready(function ($) {//此部分使搜索工作.(功能() {var searchTerm, panelContainerId;$('#accordion_search_bar').on('change keyup', function() {searchTerm = $(this).val();//console.log( $(this).val() );$('#accordionname1 > .panel, #accordionname2 > .panel').each(function() {//这是添加多个部分的正确方法吗?panelContainerId = '#' + $(this).attr('id');//<<应该是 collapse10 或 11 等,但没有得到它//console.log( $(this).attr('id') );//使搜索不区分大小写$.extend($.expr[':'], {'包含':函数(元素,我,匹配,数组){返回 (elem.textContent || elem.innerText || '').toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;}});//END 不区分大小写//显示和隐藏触发器$(panelContainerId + ':not(:contains(' + searchTerm + '))').hide();//隐藏包含搜索查询的行.$(panelContainerId + ':contains(' + searchTerm + ')').show().css({"background-color":"red"});//显示包含答案的行 - 用红色突出显示!});});}());//结束显示和隐藏触发器//结尾});
//colors//$grey: #cacaca;//主要的#page_container {边距顶部:15px;底边距:15px;}//搜索输入#accordion_search_bar_container {位置:相对;&:在{之后内容:'\e003';font-family: Glyphicons Halflings;宽度:18px;高度:18px;位置:绝对;右:10px;底部:10px;边距:20px;}#accordion_search_bar {显示:块;边距:20px 自动;宽度:100%;填充:27px 10px;边框:1px 实心 $grey;边框半径:25px;大纲:0;}}//使所有行都可点击.面板标题{一种 {显示:块;}}
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/><div class="container" id="page_container"><div id="accordion_search_bar_container"><input type="search" id="accordion_search_bar" placeholder="搜索"/><input type="button" id="accordion_search" value="在常见问题中搜索">
<h2 id="one">第一部分 - 什么令人惊讶?</h2><div class="panel-group" id="accordionname1"><div class="panel panel-default panel-even"><div class="panel-heading"><a class="accordion-toggle" data-toggle="collapse" data-parent="#accordionname1" href="#collapse10"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>告诉我所有关于惊讶的事情?</h5></a>
<div id="collapse10" class="panel-collapse 折叠"><div class="panel-body postclass"><p>做令人惊奇的事情是令人惊奇的</p>
<div class="panel panel-default panel-odd"><div class="panel-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname1" href="#collapse11"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>惊讶有什么了不起?</h5></a></div><div id="collapse11" class="panel-collapse 折叠"><div class="panel-body postclass"><p>你必须相信它是惊人的!</p>
<h2 id="two">第二部分 - 如何感到惊讶</h2><div class="panel-group" id="accordionname2"><div class="panel panel-default panel-even"><div class="panel-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname2" href="#collapse10"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>我在哪里注册才能感到惊讶?</h5></a>
<div id="collapse10" class="panel-collapse 折叠"><div class="panel-body postclass"><p>您在 Be Amazed 注册页面注册</p>
<div class="panel panel-default panel-odd"><div class="panel-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname2" href="#collapse11"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>一旦我注册感到惊讶会发生什么?</h5></a></div><div id="collapse11" class="panel-collapse 折叠"><div class="panel-body postclass"><p>一旦您注册,我们将与您联系,让您大吃一惊.</p>
<h2 id="three">第三部分 - 退款</h2><div class="panel-group" id="accordionname3"><div class="panel panel-default panel-even"><div class="panel-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname3" href="#collapse10"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>我并不感到惊讶 - 我可以获得退款吗?</h5></a>
<div id="collapse10" class="panel-collapse 折叠"><div class="panel-body postclass"><p>那太糟糕了,我们确实试图让你感到惊讶,但我们认为很棒的事情,你没有.所以我们会给你一个惊人的信用.</p>
<div class="panel panel-default panel-odd"><div class="panel-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname3" href="#collapse11"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>我可以用积分做什么?</h5></a></div><div id="collapse11" class="panel-collapse 折叠"><div class="panel-body postclass"><p>嗯,这很神奇,因为它当然没用!</p>
解决方案
这里需要隐藏整个面板,可以使用 panel-default
类.首先隐藏所有 div
使用该类名,然后使用 :contains
来检查面板是否有 searchTerm
是否由用户搜索,具体取决于此添加 css
只到那个特定的面板.
然后,对于重置按钮,使用 $(".panel-group").find(".panel-default").show()
显示所有在输入时隐藏的面板并且在这里您将 background-color
更改为普通颜色或任何其他颜色.
演示代码:
jQuery(document).ready(function($) {//此部分使搜索工作.(功能() {var searchTerm, panelContainerId;$('#accordion_search_bar').on('change keyup', function() {searchTerm = $(this).val();var collapse = $(".panel-group");如果 ($(this).val() != "") {//查找面板默认隐藏它们collapse.find(".panel-default").hide();//隐藏所有李//遍历面板组$('.panel-group').each(function() {//检查是否匹配collapse.find('.panel-collapse:contains(' + searchTerm + ')').parent().show().css({背景颜色":红色"});});} 别的 {collapse.find(".panel-default").show().css({背景颜色": ""});;//显示全部并删除红色背景}});}());$('#resetbtn').click(function() {$('#accordion_search_bar').val("");$(".panel-group").find(".panel-default").show().css({背景颜色": ""});//显示所有移除红色背景});});
//main#page_container {边距顶部:15px;底边距:15px;}//搜索输入#accordion_search_bar_container {位置:相对;&:在{之后内容:'\e003';font-family: Glyphicons Halflings;宽度:18px;高度:18px;位置:绝对;右:10px;底部:10px;边距:20px;}#accordion_search_bar {显示:块;边距:20px 自动;宽度:100%;填充:27px 10px;边框:1px 实心 $grey;边框半径:25px;大纲:0;}}//使所有行都可点击.panel-title./colors//$grey: #cacaca;//主要的#page_container {边距顶部:15px;底边距:15px;}//搜索输入#accordion_search_bar_container {位置:相对;&:在{之后内容:'\e003';font-family: Glyphicons Halflings;宽度:18px;高度:18px;位置:绝对;右:10px;底部:10px;边距:20px;}#accordion_search_bar {显示:块;边距:20px 自动;宽度:100%;填充:27px 10px;边框:1px 实心 $grey;边框半径:25px;大纲:0;}}//使所有行都可点击.panel-title a {显示:块;}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script><div class="container" id="page_container"><div id="accordion_search_bar_container"><input type="search" id="accordion_search_bar" placeholder="搜索"/><input type="button" id="accordion_search" value="在常见问题中搜索"><input type="button" id="resetbtn" value="Reset">
<h2 id="one">第一部分 - 什么令人惊讶?</h2><div class="panel-group" id="accordionname1"><div class="panel panel-default panel-even"><div class="panel-heading"><a class="accordion-toggle" data-toggle="collapse" data-parent="#accordionname1" href="#collapse10"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>告诉我所有关于惊讶的事情?</h5></a>
<div id="collapse10" class="panel-collapse 折叠"><div class="panel-body postclass"><p>做令人惊奇的事情是令人惊奇的</p>
<div class="panel panel-default panel-odd"><div class="panel-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname1" href="#collapse11"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>惊讶有什么了不起?</h5></a>
<div id="collapse11" class="panel-collapse 折叠"><div class="panel-body postclass"><p>你必须相信它是惊人的!</p>
<h2 id="two">第二部分 - 如何感到惊讶</h2><div class="panel-group" id="accordionname2"><div class="panel panel-default panel-even"><div class="panel-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname2" href="#collapse12"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>我在哪里注册才能感到惊讶?</h5></a>
<div id="collapse12" class="panel-collapse 折叠"><div class="panel-body postclass"><p>您在 Be Amazed 注册页面注册</p>
<div class="panel panel-default panel-odd"><div class="panel-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname2" href="#collapse13"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>一旦我注册感到惊讶会发生什么?</h5></a>
<div id="collapse13" class="panel-collapse 折叠"><div class="panel-body postclass"><p>一旦您注册,我们将与您联系,让您大吃一惊.</p>
<h2 id="three">第三部分 - 退款</h2><div class="panel-group" id="accordionname3"><div class="panel panel-default panel-even"><div class="panel-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname3" href="#collapse14"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>我并不感到惊讶 - 我可以获得退款吗?</h5></a>
<div id="collapse14" class="panel-collapse 折叠"><div class="panel-body postclass"><p>那太糟糕了,我们确实试图让你感到惊讶,但我们认为很棒的事情,你没有.所以我们会给你一个惊人的信用.</p>
<div class="panel panel-default panel-odd"><div class="panel-heading"><a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname3" href="#collapse15"><h5><i class="icon-minus primary-color"></i><i class="icon-plus"></i>我可以用积分做什么?</h5></a>
<div id="collapse15" class="panel-collapse 折叠"><div class="panel-body postclass"><p>嗯,这很神奇,因为它当然没用!</p>
I'm working on a rather large FAQ page that needs to have multiple sections. It needs an efficient search function and I've put one together based on a previous answer, but I'm stuck on a couple points.
- Search function is not working - seems to be not picking the correct 'panelContainerId'
- How to combine multiple accordion IDs into the search function
- How to highlight the search term in the result
Here's my working codes - see below also here https://jsfiddle.net/clappertrapp/92vxzes7/71/
jQuery(document).ready(function ($) {
// This section makes the search work.
(function() {
var searchTerm, panelContainerId;
$('#accordion_search_bar').on('change keyup', function() {
searchTerm = $(this).val();
//console.log( $(this).val() );
$('#accordionname1 > .panel, #accordionname2 > .panel').each(function() { // is this the right way to add multiple sections?
panelContainerId = '#' + $(this).attr('id'); // << should be collapse10 or 11 etc, but not getting it
//console.log( $(this).attr('id') );
// Makes search to be case insesitive
$.extend($.expr[':'], {
'contains': function(elem, i, match, array) {
return (elem.textContent || elem.innerText || '').toLowerCase()
.indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
// END case insesitive
// Show and Hide Triggers
$(panelContainerId + ':not(:contains(' + searchTerm + '))').hide(); //Hide the rows that done contain the search query.
$(panelContainerId + ':contains(' + searchTerm + ')').show().css({"background-color":"red"}); //Show the rows that contain answer - highlight with red!
});
});
}());
// End Show and Hide Triggers
// END
});
//colors
//$grey: #cacaca;
// main
#page_container {
margin-top: 15px;
margin-bottom: 15px;
}
// search input
#accordion_search_bar_container {
position: relative;
&:after {
content: '\e003';
font-family: Glyphicons Halflings;
width: 18px;
height: 18px;
position: absolute;
right: 10px;
bottom: 10px;
margin:20px;
}
#accordion_search_bar {
display: block;
margin: 20px auto;
width: 100%;
padding: 27px 10px;
border: 1px solid $grey;
border-radius: 25px;
outline: 0;
}
}
// make all the line clickable
.panel-title {
a {
display: block;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container" id="page_container">
<div id="accordion_search_bar_container">
<input type="search" id="accordion_search_bar" placeholder="Search" />
<input type="button" id="accordion_search" value="Search in FAQs">
</div>
<h2 id="one">Section one - What is being amazed?</h2>
<div class="panel-group" id="accordionname1">
<div class="panel panel-default panel-even">
<div class="panel-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordionname1" href="#collapse10">
<h5><i class="icon-minus primary-color"></i>
<i class="icon-plus"></i>Tell me all about being amazed?</h5>
</a>
</div>
<div id="collapse10" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>Doing amazing things is amazing</p>
</div>
</div>
</div>
<div class="panel panel-default panel-odd">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname1" href="#collapse11">
<h5>
<i class="icon-minus primary-color"></i>
<i class="icon-plus"></i>
What's so great about being amazed?</h5>
</a></div>
<div id="collapse11" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>You have to trust that it is amazing!</p>
</div>
</div>
</div>
</div>
<h2 id="two">Section two - How to be amazed</h2>
<div class="panel-group" id="accordionname2">
<div class="panel panel-default panel-even">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname2" href="#collapse10">
<h5><i class="icon-minus primary-color"></i>
<i class="icon-plus"></i>Where do I sign up to become amazed?</h5>
</a>
</div>
<div id="collapse10" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>You sign up at the Be Amazed sign up page</p>
</div>
</div>
</div>
<div class="panel panel-default panel-odd">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname2" href="#collapse11">
<h5>
<i class="icon-minus primary-color"></i>
<i class="icon-plus"></i>
What happens once I am sign up to be amazed?</h5>
</a></div>
<div id="collapse11" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>Once you've signed up, we'll be in touch to amaze you.</p>
</div>
</div>
</div>
</div>
<h2 id="three">Section three - Refunds</h2>
<div class="panel-group" id="accordionname3">
<div class="panel panel-default panel-even">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname3" href="#collapse10">
<h5><i class="icon-minus primary-color"></i>
<i class="icon-plus"></i>I wasn't amazed - can I get a refund?</h5>
</a>
</div>
<div id="collapse10" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>Well that's too bad, we did try to amaze you, but what we thought was amazing, you didn't. so we will give you an amazing credit.</p>
</div>
</div>
</div>
<div class="panel panel-default panel-odd">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname3" href="#collapse11">
<h5>
<i class="icon-minus primary-color"></i>
<i class="icon-plus"></i>
What can I do with the credit?</h5>
</a></div>
<div id="collapse11" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>Well, it's amazing because it's useless of course!</p>
</div>
</div>
</div>
</div>
</div>
解决方案
As here you need to hide entire panel you can use panel-default
class .First hide all divs
with that class name and then use :contains
to check if the panel has the searchTerm
which is search by user or not depending on this add css
to that particular panel only .
Then , for reset button use $(".panel-group").find(".panel-default").show()
to show all panel which is hidden while typing and also here you change background-color
to normal or any other color .
Demo Code :
jQuery(document).ready(function($) {
// This section makes the search work.
(function() {
var searchTerm, panelContainerId;
$('#accordion_search_bar').on('change keyup', function() {
searchTerm = $(this).val();
var collapse = $(".panel-group");
if ($(this).val() != "") {
//find panel default hide them
collapse.find(".panel-default").hide(); //hide all li
//loop through panel group
$('.panel-group').each(function() {
//check if matches
collapse.find('.panel-collapse:contains(' + searchTerm + ')').parent().show().css({
"background-color": "red"
});
});
} else {
collapse.find(".panel-default").show().css({
"background-color": ""
});; //show all and remove red bg
}
});
}());
$('#resetbtn').click(function() {
$('#accordion_search_bar').val("");
$(".panel-group").find(".panel-default").show().css({
"background-color": ""
});//show all remove red bg
});
});
// main
#page_container {
margin-top: 15px;
margin-bottom: 15px;
}
// search input
#accordion_search_bar_container {
position: relative;
&:after {
content: '\e003';
font-family: Glyphicons Halflings;
width: 18px;
height: 18px;
position: absolute;
right: 10px;
bottom: 10px;
margin: 20px;
}
#accordion_search_bar {
display: block;
margin: 20px auto;
width: 100%;
padding: 27px 10px;
border: 1px solid $grey;
border-radius: 25px;
outline: 0;
}
}
// make all the line clickable
.panel-title./colors //$grey: #cacaca;
// main
#page_container {
margin-top: 15px;
margin-bottom: 15px;
}
// search input
#accordion_search_bar_container {
position: relative;
&:after {
content: '\e003';
font-family: Glyphicons Halflings;
width: 18px;
height: 18px;
position: absolute;
right: 10px;
bottom: 10px;
margin: 20px;
}
#accordion_search_bar {
display: block;
margin: 20px auto;
width: 100%;
padding: 27px 10px;
border: 1px solid $grey;
border-radius: 25px;
outline: 0;
}
}
// make all the line clickable
.panel-title a {
display: block;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<div class="container" id="page_container">
<div id="accordion_search_bar_container">
<input type="search" id="accordion_search_bar" placeholder="Search" />
<input type="button" id="accordion_search" value="Search in FAQs">
<input type="button" id="resetbtn" value="Reset">
</div>
<h2 id="one">Section one - What is being amazed?</h2>
<div class="panel-group" id="accordionname1">
<div class="panel panel-default panel-even">
<div class="panel-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordionname1" href="#collapse10">
<h5><i class="icon-minus primary-color"></i>
<i class="icon-plus"></i>Tell me all about being amazed?</h5>
</a>
</div>
<div id="collapse10" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>Doing amazing things is amazing</p>
</div>
</div>
</div>
<div class="panel panel-default panel-odd">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname1" href="#collapse11">
<h5>
<i class="icon-minus primary-color"></i>
<i class="icon-plus"></i> What's so great about being amazed?</h5>
</a>
</div>
<div id="collapse11" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>You have to trust that it is amazing!</p>
</div>
</div>
</div>
</div>
<h2 id="two">Section two - How to be amazed</h2>
<div class="panel-group" id="accordionname2">
<div class="panel panel-default panel-even">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname2" href="#collapse12">
<h5><i class="icon-minus primary-color"></i>
<i class="icon-plus"></i>Where do I sign up to become amazed?</h5>
</a>
</div>
<div id="collapse12" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>You sign up at the Be Amazed sign up page</p>
</div>
</div>
</div>
<div class="panel panel-default panel-odd">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname2" href="#collapse13">
<h5>
<i class="icon-minus primary-color"></i>
<i class="icon-plus"></i> What happens once I am sign up to be amazed?</h5>
</a>
</div>
<div id="collapse13" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>Once you've signed up, we'll be in touch to amaze you.</p>
</div>
</div>
</div>
</div>
<h2 id="three">Section three - Refunds</h2>
<div class="panel-group" id="accordionname3">
<div class="panel panel-default panel-even">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname3" href="#collapse14">
<h5><i class="icon-minus primary-color"></i>
<i class="icon-plus"></i>I wasn't amazed - can I get a refund?</h5>
</a>
</div>
<div id="collapse14" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>Well that's too bad, we did try to amaze you, but what we thought was amazing, you didn't. so we will give you an amazing credit.</p>
</div>
</div>
</div>
<div class="panel panel-default panel-odd">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordionname3" href="#collapse15">
<h5>
<i class="icon-minus primary-color"></i>
<i class="icon-plus"></i> What can I do with the credit?</h5>
</a>
</div>
<div id="collapse15" class="panel-collapse collapse ">
<div class="panel-body postclass">
<p>Well, it's amazing because it's useless of course!</p>
</div>
</div>
</div>
</div>
</div>
这篇关于Jquery Bootstrap 手风琴常见问题解答的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文