gpt4 book ai didi

jquery - 组合多个 jquery 过滤器(UI slider 、复选框)

转载 作者:行者123 更新时间:2023-12-01 03:41:36 25 4
gpt4 key购买 nike

我想要一个页面,在其中显示一堆 div,div 的显示基于页面上所做的选择。

这里我使用两种类型的过滤器,即 jQuery ui slider(price range)checkbox

两者单独工作都很好,但我想将两者结合起来

我找不到结合这两个过滤器的技巧

fiddle : Working Demo

HTML

<div id="slider-container">
<p>
<input type="text" id="amount" style="border: 0; color: #f6931f; font-weight: bold;" />
</p>
</div>

<ul id="filters">
<li>
<input type="checkbox" value="categorya" id="filter-categorya" />
<label for="filter-categorya">Category A</label>
</li>
<li>
<input type="checkbox" value="categoryb" id="filter-categoryb" />
<label for="filter-categoryb">Category B</label>
</li>
</ul>

<hr>
<h3>Results</h3>
<div id="computers">
<div class="system categorya categoryb" data-price="299">A, B - 299</div>
<div class="system categorya" data-price="599">A - 599</div>
<div class="system categoryb" data-price="1099">B - 1099</div>
</div>
<div id="slider-range"></div>

jQuery

 $(function() {
$('#slider-container').slider({
range: true,
min: 299,
max: 1099,
values: [ 299, 1099 ],
slide: function(event, ui) {
$( "#amount" ).val( "$" + ui.values[ 0 ] + " - $" + ui.values[ 1 ] );
var mi = ui.values[ 0 ];
var mx = ui.values[ 1 ];
filterSystem(mi, mx);
}
});
$( "#amount" ).val( "$" + $( "#slider-container" ).slider( "values", 0 ) +
" - $" + $( "#slider-container" ).slider( "values", 1 ) );
});

function filterSystem(minPrice, maxPrice) {
$("#computers div.system").hide().filter(function() {
var price = parseInt($(this).data("price"), 10);
return price >= minPrice && price <= maxPrice;
}).show();
}

$("#filters :checkbox").click(function() {
$("#computers div.system").hide();
$("#filters :checkbox:checked").each(function() {
$("." + $(this).val()).show();
});
});

谁能帮我组合这两个过滤器。

预先感谢,抱歉我的英语不好

最佳答案

您可以将两个过滤器组合在一个函数filterSystem()中,您可以在 slider 和复选框的每次状态更改时调用该函数:

更新

以下是适用于多个复选框过滤器的更新:

$(function () {
var minPrice = 299,
maxPrice = 1099,
$filter_lists = $("#filters ul"),
$filter_checkboxes = $("#filters :checkbox"),
$items = $("#computers div.system");

$filter_checkboxes.click(filterSystem); //Call filter function on checkbox change

$('#slider-container').slider({
range: true,
min: minPrice,
max: maxPrice,
values: [minPrice, maxPrice],
slide: function (event, ui) {
$("#amount").val("$" + ui.values[0] + " - $" + ui.values[1]);
minPrice = ui.values[0];
maxPrice = ui.values[1];
filterSystem(); //Call filter function on slider change
}
});
$("#amount").val("$" + minPrice + " - $" + maxPrice);

//Slider filter
function filterSlider(elem) {
var price = parseInt($(elem).data("price"), 10);
console.log(price);
return price >= minPrice && price <= maxPrice;
}

//Checkbox filter
function filterCheckboxes(elem) {
var $elem = $(elem),
passAllFilters = true;
$filter_lists.each(function () {
var classes = $(this).find(':checkbox:checked').map(function () {
return $(this).val();
}).get();
var passThisFilter = false;
$.each(classes, function (index, item) {
if ($elem.hasClass(item)) {
passThisFilter = true;
return false; //stop inner loop
}
});
if (!passThisFilter) {
passAllFilters = false;
return false; //stop outer loop
}
});
return passAllFilters;
}

//Combine checkbox and slider filters
function filterSystem() {
$items.hide().filter(function () {
return filterSlider(this) && filterCheckboxes(this);
}).show();
}
});

这是updated fiddle

请注意,此方法需要将复选框列表包装在容器中#filters

关于jquery - 组合多个 jquery 过滤器(UI slider 、复选框),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19194863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com