I wanted to create a live search on the title and the description or content with an accordion. I've seen this post How to search through nested accordion using JS and see if it could help and I've tried it and it works fine.
The problem is I don't think it looks for the title, it only look for the description. I wanted to look at it for both title and description.
HTML
<input type="text" placeholder="Search Keyword Info" class="input-search" id="search-qa">
<div class="container">
<div class="collapse">
<div class="collapse__head">
<label class="qa-question searchable-content" data-category="location"> Where is Test</label>
</div>
<div class="collapse__body">
<div class="collapse__inner">
<div class="qa-answer" data-category="location">
<p>Qweeee not a description.</p>
</div>
</div>
</div>
</div>
<div class="collapse">
<div class="collapse__head">
<label class="qa-question searchable-content" data-category="location"> What is a Test</label>
</div>
<div class="collapse__body">
<div class="collapse__inner">
<div class="qa-answer" data-category="location">
<p>Lorem Ips</p>
</div>
</div>
</div>
</div>
<div class="collapse">
<div class="collapse__head">
<label class="qa-question searchable-content" data-category="location"> Who is Test</label>
</div>
<div class="collapse__body">
<div class="collapse__inner">
<div class="qa-answer" data-category="location">
<p>Dolor it</p>
</div>
</div>
</div>
</div>
</div>
JS
$("#search-qa").on('keyup', function() {
let searchText = $(this).val().toLowerCase();
$(".collapse *").each(function() {
let text = $(this).immediateText().toLowerCase();
if (text.indexOf(searchText) == -1) {
$(this).parents('.collapse').addClass('hidden');
}
else {
$(this).parents('.collapse').removeClass('hidden');
}
});
});
$.fn.immediateText = function() {
return this.contents().not(this.children()).text();
};
Fiddle: https://jsfiddle.net/idonthaveagirlfriend/3con2p4x/13/
Thanks for the help!