Reputation: 73
Hi I'm a total newbie and I'm kind of stuck here. I'm making this search below.
The problem is that I can filter out categories with the select option. But I can't search only in the selected category. The search always looks for all div's
with .visible
attached. I know I must remove the .visible
from the div's
that don't belong to the selected category but I'm out of ideas.
Can someone help me here?
link to a fiddle
$("#searchInput").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("#searchFilterDiv div.CompanyDirectoryItem.visible").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
console.log(value);
});
//Filter studyFields
$('select#studyselector').change(function() {
var filter = $(this).val()
filterList(filter);
console.log(filter);
});
//News filter function
function filterList(value) {
var list = $("#searchFilterDiv div.CompanyDirectoryItem.search-results-box-item");
$(list).fadeOut("fast");
$("#searchFilterDiv").find("div.CompanyDirectoryItem.search-results-box-item[data-name*=" + value + "]").addClass('visible').each(function (i) {
$(this).delay(200).slideDown("fast");
});
//}
}
if($('.CompanyDirectoryItem.visible').length===0){
$('.error').show();
}else{
$('.error').hide();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2>sortdata</h2>
<input id="searchInput" type="text" value="" placeholder="search"/>
<select name="studyselector" id="studyselector">
<option value="All">All news</option>
<option value="Cat1">Category 1</option>
<option value="Cat2">Category 2</option>
<option value="Cat3">Category 3</option>
<option value="Cat4">Category 4</option>
<option value="Cat5">Category 5</option>
<option value="Cat6">Category 6</option>
<option value="Cat7">Category 7</option>
</select>
<hr />
<div id="searchFilterDiv">
<div class="CompanyDirectoryItem search-results-box-item" data-name=" All, Cat1">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title1</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat2, Cat5">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title2</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat3">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title3</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat4">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title4</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat5">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title5</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat6, Cat1">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title6</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat7, Cat3">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title7+3</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat7">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title7</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
</div>
Upvotes: 0
Views: 113
Reputation: 345
You could change your onkeyup event listener so that it will get all divs with news content and then compare their contents to whatever is entered in the search box. It can check to see if the search appears in a divs news content with the .search() method and a newly created RegExp object:
EDIT: in order to use RegExp with your news content, you must handle special characters as well, so I added a new line to replace special characters such as "+" with "+" and etc.
//changed your onkeyup listener to use regexp
//on all divs which contain news content e.g.
//divs with class news-txt
$("#searchInput").on("keyup", function() {
var value = $(this).val().toLowerCase();
//in order to use RegExp, you must escape special characters, such as the "+" you use in one title
value = value.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
$('.news-txt').each(function() {
if ($(this).text().search(new RegExp(value, "i")) < 0) {
$(this).parent().hide();
} else {
$(this).parent().show();
}
});
});
//Filter studyFields
$('select#studyselector').change(function() {
var filter = $(this).val()
filterList(filter);
console.log(filter);
});
//News filter function
function filterList(value) {
var list = $("#searchFilterDiv div.CompanyDirectoryItem.search-results-box-item");
$(list).fadeOut("fast");
$("#searchFilterDiv").find("div.CompanyDirectoryItem.search-results-box-item[data-name*=" + value + "]").addClass('visible').each(function(i) {
$(this).delay(200).slideDown("fast");
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2>sortdata</h2>
<input id="searchInput" type="text" value="" placeholder="search" />
<select name="studyselector" id="studyselector">
<option value="All">All news</option>
<option value="Cat1">Category 1</option>
<option value="Cat2">Category 2</option>
<option value="Cat3">Category 3</option>
<option value="Cat4">Category 4</option>
<option value="Cat5">Category 5</option>
<option value="Cat6">Category 6</option>
<option value="Cat7">Category 7</option>
</select>
<hr />
<div id="searchFilterDiv">
<div class="CompanyDirectoryItem search-results-box-item" data-name=" All, Cat1">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title1</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat2, Cat5">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title2</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat3">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title3</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat4">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title4</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat5">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title5</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat6, Cat1">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title6</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat7, Cat3">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title7+3</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat7">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title7</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
</div>
Upvotes: 0
Reputation: 24001
If I got your point .. You just need to remove the visible
class?!!
You can remove the visible
class from all search-results-box-item
then use .filter("[data-name*=" + value + "]")
to filter by data-name
attribute like this
$("#searchFilterDiv").find("div.CompanyDirectoryItem.search-results-box-item").removeClass('visible').filter("[data-name*=" + value + "]").addClass('visible').each.....`
$("#searchInput").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("#searchFilterDiv div.CompanyDirectoryItem.visible").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
console.log(value);
});
//Filter studyFields
$('select#studyselector').change(function() {
var filter = $(this).val()
filterList(filter);
console.log(filter);
});
//News filter function
function filterList(value) {
var list = $("#searchFilterDiv div.CompanyDirectoryItem.search-results-box-item");
$(list).fadeOut("fast");
$("#searchFilterDiv").find("div.CompanyDirectoryItem.search-results-box-item").removeClass('visible').filter("[data-name*=" + value + "]").addClass('visible').each(function (i) {
$(this).delay(200).slideDown("fast");
});
//}
}
if($('.CompanyDirectoryItem.visible').length===0){
$('.error').show();
}else{
$('.error').hide();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2>sortdata</h2>
<input id="searchInput" type="text" value="" placeholder="search"/>
<select name="studyselector" id="studyselector">
<option value="All">All news</option>
<option value="Cat1">Category 1</option>
<option value="Cat2">Category 2</option>
<option value="Cat3">Category 3</option>
<option value="Cat4">Category 4</option>
<option value="Cat5">Category 5</option>
<option value="Cat6">Category 6</option>
<option value="Cat7">Category 7</option>
</select>
<hr />
<div id="searchFilterDiv">
<div class="CompanyDirectoryItem search-results-box-item" data-name=" All, Cat1">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title1</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat2, Cat5">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title2</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat3">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title3</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat4">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title4</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat5">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title5</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat6, Cat1">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title6</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat7, Cat3">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title7+3</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
<div class="CompanyDirectoryItem search-results-box-item" data-name="All, Cat7">
<div class="thumb">
<img alt="Our ALT text here" title="Our title here" src="http://placehold.it/150x150">
</div>
<div class="news-txt">
<h3><a href="">A news title7</a></h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua...</p>
</div>
</div>
</div>
Upvotes: 2