javascript - 修改搜索过滤器 // 不同部分的不同命令
问题描述
我一直在进行“简单”过滤搜索,但遇到了问题。目前我已经设置了它,以便每个复选框选择缩小搜索范围(即,如果您选择 location + feature1 + feature2 + feature3 它只会返回包含所有选项的结果)。现在我意识到,如果用户可以选择多个位置,然后按功能缩小结果范围,则更有意义。例如,如果用户选择位置“Kelowna + Penticton”和“feature1 + feature2 + feature3”,结果将来自这两个位置,但需要所有选定的特征。谁能告诉我我需要在我的代码中添加什么才能使这成为可能?
这是我当前代码的示例:
var $filterCheckboxes = $('input[type="checkbox"]');
function filterFunc() {
var filterValues = [];
$filterCheckboxes.filter(':checked').each(function () {
var value = this.value;
if (filterValues.indexOf(value) === -1) {
filterValues.push(value);
}
});
$('.result')
.hide()
.filter(function(_, resultNode) {
var categoryValues = $(resultNode).data('category').split(/\s+/);
return filterValues.every(function (value) {
return categoryValues.indexOf(value) > -1;
});
})
.show();
}
$filterCheckboxes.on('change', filterFunc);
body { margin: -3px 0 0 0; }
.location, .element, .results { float: left; margin: 0 5px; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="location">
<strong>Location:</strong>
<br/>
<label>
<input type="checkbox" value="kelowna" id="kelowna" />
Kelowna
</label>
<br/>
<label>
<input type="checkbox" value="oliver" id="oliver" />
Oliver
</label>
<br/>
<label>
<input type="checkbox" value="osoyoos" id="osoyoos" />
Osoyoos
</label>
<br/>
<label>
<input type="checkbox" value="penticton" id="penticton" />
Penticton
</label>
<br/>
<label>
<input type="checkbox" value="summerland" id="summerland" />
Summerland
</label>
<br/>
<label>
<input type="checkbox" value="vernon" id="vernon" />
Vernon
</label>
<br/>
<label>
<input type="checkbox" value="westk" id="westk" />
West Kelowna
</label>
<br/>
</div>
<div class="element">
<strong>Features:</strong>
<br/>
<label>
<input type="checkbox" value="feature1" id="feature1" />
feature1
</label>
<br/>
<label>
<input type="checkbox" value="feature2" id="feature2" />
feature2
</label>
<br/>
<label>
<input type="checkbox" value="feature3" id="feature3" />
feature3
</label>
<br/>
<label>
<input type="checkbox" value="feature4" id="feature4" />
feature4
</label>
<br/>
<label>
<input type="checkbox" value="feature5" id="feature5" />
Structural feature5
</label>
</div>
<div class="results">
<div class="result" data-id="aloe" data-category="penticton feature1 feature2">
<a target="_blank" href="blank.png"><img src="blank.png" alt="Blank" width="600" height="400"></a>
<div class="desc">Result 1</div>
</div>
<div class="result" data-category="kelowna feature1 feature2 feature 3">
<a target="_blank" href="blank.png"><img src="blank.png" alt="Blank" width="600" height="400"></a>
<div class="desc">Result 2</div>
</div>
<div class="result" data-category="oliver feature4 feature5">
<a target="_blank" href="blank.png"><img src="blank.png" alt="Blank" width="600" height="400"></a>
<div class="desc">Result 3</div>
</div>
<div class="result" data-category="kelowna feature4 feature5 feature1 feature2">
<a target="_blank" href="blank.png"><img src="blank.png" alt="Blank" width="600" height="400"></a>
<div class="desc">Result 4</div>
</div>
<div class="result" data-category="penticton feature4 feature5 feature3">
<a target="_blank" href="blank.png"><img src="blank.png" alt="Blank" width="600" height="400"></a>
<div class="desc">Result 5</div>
</div>
<div class="result" data-category="osoyoos feature2 feature3">
<a target="_blank" href="blank.png"><img src="blank.png" alt="Blank" width="600" height="400"></a>
<div class="desc">Result 6</div>
</div>
</div>
希望这是有道理的;我还是一个初学者,所以解释起来有点困难,因为我自己并不完全理解它!谢谢你的帮助。
解决方案
推荐阅读
- angular - 名称只能包含 URL 友好字符 NPM 安装
- java - HotSpot JVM 在哪里存储解释的字节码?
- powershell - 在 xml 生成 PowerShell 脚本中实现跟踪
- c++ - 为什么我的计数器应该为 0 时不能正常工作,但其他值 >0 工作正常?
- android - kotlin 中 val 的动态延迟初始化
- python - eBay API 返回 errorID 2000,服务操作 GetItem 未知
- sql-server - 加入未返回正确结果
- html - 第 N 个子选择器不适用于 CSS Grid 中的背景
- php - 数组元素似乎被忽略了?
- amazon-web-services - 如何按标签值过滤 CloudFormation 堆栈?