Javascript Jquery通过多个数字范围进行过滤
我想我被卡住了。。。我正在尝试获取项目列表,并根据对象的属性创建过滤器。我把它简化成一个简单的例子,列出了成本和年份。我目前在页面上有一个书籍列表和过滤器(复选框),可以选择这些过滤器来仅显示成本和/或年份范围内的书籍。以下是我目前掌握的代码:Javascript Jquery通过多个数字范围进行过滤,javascript,jquery,filter,filtering,range,Javascript,Jquery,Filter,Filtering,Range,我想我被卡住了。。。我正在尝试获取项目列表,并根据对象的属性创建过滤器。我把它简化成一个简单的例子,列出了成本和年份。我目前在页面上有一个书籍列表和过滤器(复选框),可以选择这些过滤器来仅显示成本和/或年份范围内的书籍。以下是我目前掌握的代码: <div id="filters"> <h1>FILTERS</h1> <div class="filter filter_cost"> <input class="target" type=
<div id="filters">
<h1>FILTERS</h1>
<div class="filter filter_cost">
<input class="target" type="checkbox" min="0" max="9" />Under $10.00<br/>
<input class="target" type="checkbox" min="10" max="19" />$10-$19<br/>
<input class="target" type="checkbox" min="20" max="29" />$20-$29<br/>
<input class="target" type="checkbox" min="30" max="39" />$30-$39<br/>
<input class="target" type="checkbox" min="40" max="1000" />$40 and Over<br/>
</div>
<div class="filter filter_year">
<input class="target" type="checkbox" min="1700" max="1799" />18th Century<br/>
<input class="target" type="checkbox" min="1800" max="1899" />19th Century<br/>
<input class="target" type="checkbox" min="1900" max="1999" />20th Century<br/>
<input class="target" type="checkbox" min="2000" max="2999" />21st Centruy<br/>
</div>
</div>
<div id="books">
<h1>BOOKS</h1>
<div class="book">
<h1>Book 1</h1>
<input type="hidden" name="cost" value="13" />
<input type="hidden" name="year" value="1997" />
</div>
<div class="book">
<h1>Book 2</h1>
<input type="hidden" name="cost" value="22" />
<input type="hidden" name="year" value="1872" />
</div>
</div>
过滤器
低于10.00美元
$10-$19
$20-$29
30-39美元
40美元及以上
18世纪
19世纪
20世纪
21世纪中心
书
第一册
第二册
和我的jQuery(使用1.6.2):
$(文档).ready(函数(){
$(“input.target”).change(函数(){
filterResults();
});
});
函数filterResults(){
$(“.book”)。每个(函数(){
var cost=$(this.find(“输入[name='cost']”)val();
var year=$(this.find(“输入[name='year']”)val();
var cover=$(this.find)(“input[name='cover']”)val();
var isHidden=假;
//log(“范围内的成本:+filterRange(成本,.filter_成本”);
//console.log(“范围内的年份:+filterge(年份,.filter_Year”);
var filterCost=filterAge(成本,“.filter_成本”)?showBook($(此)):hideBook($(此));
var filterYear=filterAge(year,“.filter_year”)?showBook($(this)):hideBook($(this));
isHidden?“:过滤器成本;
isHidden?“:过滤器耳朵;
功能展示手册(obj){
obj.show();
}
功能记忆库(obj){
isHidden=真;
隐藏对象();
}
})
}
功能过滤(金额、要素){
var checkedInputs=$(elem).find(“input:checked”).length;
var totalInputs=$(elem).find(“input”).length;
var inRange=函数(){
$(elem).find(“输入:选中”).each(函数(){
var min=$(this.attr('min');
var max=$(this.attr('max');
如果(金额>=min&&amount尝试:
函数过滤(金额、要素){
var checkedInputs=$(elem).find(“input:checked”).length;
var totalInputs=$(elem).find(“input”).length;
var inRange=假;
$(elem).find(“输入:选中”).each(函数(){
var min=$(this.attr('min');
var max=$(this.attr('max');
如果jquery中的(amount>=min&&amount,则dom元素返回语句上的每个循环都会中断。因此,您的实现是错误的。请尝试此方法
function filterRange(amount, elem) {
var checkedInputs = $(elem).find("input:checked").length;
var totalInputs = $(elem).find("input").length;
var returnValue = false;
$(elem).find("input:checked").each(function () {
var min = $(this).attr('min');
var max = $(this).attr('max');
if(amount >= min && amount <= max){
returnValue = true;
return true;
}
});
return (checkedInputs == 0 || totalInputs == checkedInputs || returnValue );
}
函数过滤(金额、要素){
var checkedInputs=$(elem).find(“input:checked”).length;
var totalInputs=$(elem).find(“input”).length;
var returnValue=false;
$(elem).find(“输入:选中”).each(函数(){
var min=$(this.attr('min');
var max=$(this.attr('max');
如果(amount>=min&&amount是的,谢谢你……效果很好。我想我是脑子有问题。
function filterRange(amount, elem) {
var checkedInputs = $(elem).find("input:checked").length;
var totalInputs = $(elem).find("input").length;
var inRange = false;
$(elem).find("input:checked").each(function () {
var min = $(this).attr('min');
var max = $(this).attr('max');
if (amount >= min && amount <= max) {
inRange = true;
return false;
}
});
if (checkedInputs == 0 || totalInputs == checkedInputs) {
return true;
}
if (inRange) {
return true;
} else {
return false;
}
}
function filterRange(amount, elem) {
var checkedInputs = $(elem).find("input:checked").length;
var totalInputs = $(elem).find("input").length;
var returnValue = false;
$(elem).find("input:checked").each(function () {
var min = $(this).attr('min');
var max = $(this).attr('max');
if(amount >= min && amount <= max){
returnValue = true;
return true;
}
});
return (checkedInputs == 0 || totalInputs == checkedInputs || returnValue );
}