【发布时间】:2019-10-14 06:48:29
【问题描述】:
我制作了一个包含多个选项的过滤器。如您所见,有时没有结果。我将其作为用户反馈回馈给访问者:没有结果。
现在我想说明,如果某些组合由过滤器(某些值)组成,则只有在实际存在值时才能使用过滤器(因此,如果页面上没有值,则隐藏一个选项)。通过这种方式,我可以防止用户不得不进行无休止的过滤器组合来找到正确的结果。有人可以帮我吗?
$("select.filterby").change(function() {
var filters = $.map($("select.filterby").toArray(), function(e) {
return $(e).val();
}).join(".");
$("div#FilterContainer").find("div.job-offer-card").hide();
if ($("div#FilterContainer").find("div.job-offer-card." + filters).length) {
$("div#FilterContainer").find("div.job-offer-card." + filters).show();
} else {
$("div#FilterContainer").find("div.noresults").show();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span> View by:</span>
<label for="location">Location</label>
<select id="location" class="filterby">
<option value="all">Show All</option>
<option value="australia">Australia</option>
<option value="singapore">Singapore</option>
<option value="newzealand">New Zealand</option>
<option value="usa">USA</option>
<option value="uk">UK</option>
<option value="vietnam">Vietnam</option>
<option value="global">Global</option>
<option value="othercountry">Other</option>
</select>
<label for="type">Type</label>
<select id="type" class="filterby">
<option value="all">Show All</option>
<option value="accommodation">Accommodation</option>
<option value="app">App/Technology</option>
<option value="business">Business</option>
<option value="health">Health</option>
<option value="hospitality">Hospitality</option>
<option value="education">Education</option>
<option value="retail">Retail</option>
<option value="services">Services</option>
<option value="travel">Travel</option>
</select>
<label for="code">Code</label>
<select id="code" class="filterby">
<option value="all">Show All</option>
<option value="001">001</option>
<option value="002">002</option>
<option value="003">003</option>
<option value="004">004</option>
</select>
<div id="FilterContainer">
<div class="job-offer-card noresults">
<p>no results</p>
</div>
<div class="job-offer-card all vietnam accommodation travel 004">
<p>1 all vietnam accommodation travel</p>
</div>
<div class="job-offer-card all vietnam travel 003">
<p>2 all vietnam travel</p>
</div>
<div class="job-offer-card all vietnam accommodation travel">
<p>3 all vietnam accommodation travel</p>
</div>
<div class="job-offer-card all australia accommodation travel 003">
<p>4 all australia accommodation travel</p>
</div>
<div class="job-offer-card all australia education">
<p>5 all australia</p>
</div>
<div class="job-offer-card all vietnam newzealand usa accommodation">
<p>6 all vietnam accommodation</p>
</div>
<div class="job-offer-card all vietnam accommodation travel">
<p>7 all vietnam accommodation travel</p>
</div>
<div class="job-offer-card all vietnam travel">
<p>8 all vietnam travel</p>
</div>
<div class="job-offer-card all vietnam accommodation travel">
<p>9 all vietnam accommodation travel</p>
</div>
<div class="job-offer-card all australia accommodation travel">
<p>10 all australia accommodation travel</p>
</div>
<div class="job-offer-card all australia health 001">
<p>11 all australia</p>
</div>
<div class="job-offer-card all vietnam accommodation 002">
<p>12 all vietnam accommodation</p>
</div>
</div>
【问题讨论】:
-
你想要一个 JS 答案吗?不是 jQuery 答案?
-
嗨@西蒙!感谢您的回复。但它有点不同。如果没有特定值,我想隐藏一个选项,例如:if filter nr.选择 1 时,过滤器 2 等可能有不同的选项。
-
@MisterJojo 是的,这也很好!
-
只是一个改进:为什么要查找某些内容而不是再次查找?将其存储到变量中。
var items = $("div#FilterContainer").find("div.job-offer-card." + filters); if (items.length) {items.show()} else {}
标签: javascript css