Нет встроенного селектора для сравнения значений «больше чем» и «меньше чем». Вам нужно будет отфильтровать элементы вручную в зависимости от того, какие флажки установлены.
Вот рабочая демонстрация. Сначала мы скрываем все div, используя .hide()
, затем мы используем filter()
, чтобы решить, какие из них .show()
. Внутри обратного вызова фильтра мы возвращаем результат Array.prototype.some()
, который гарантирует, что хотя бы один из элементов, через которые мы итерируем, удовлетворяет условию, возвращенному в обратном вызове. (.get()
, когда вызывается без определенного индекса, просто преобразует коллекцию jQuery в массив элементов, которые мы можем использовать с .some()
).
Я также добавил else
оператор, чтобы показать все div, когда все флажки сняты.
$('input[type="checkbox"]').click(function() {
var checkedRanges = $('input[type="checkbox"]:checked');
if (checkedRanges.length) {
$(".h > .a1[data-price]").hide().filter(function() {
$div = $(this);
var divPrice = parseFloat($(this).data("price"))
return checkedRanges.get().some(function(cb) {
var minprice = parseFloat($(cb).data("min"));
var maxprice = parseFloat($(cb).data('max'));
return divPrice >= minprice && divPrice <= maxprice;
});
}).show();
} else {
$(".h > .a1[data-price]").show()
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>1000 - 2000: <input class="filter" data-min="1000" data-max="2000" type="checkbox" id="checkbox13">
3000 - 4000: <input class="filter" data-min="3000" data-max="4000" type="checkbox" id="checkbox13">
5000 - 10000: <input class="filter" data-min="5000" data-max="10000" type="checkbox" id="checkbox13">
</p>
<div class="h">
<div class="a1" data-price="1500">1500</div>
<div class="a1" data-price="4000">4000</div>
<div class="a1" data-price="1000">1000</div>
<div class="a1" data-price="3500">3500</div>
<div class="a1" data-price="2500">2500</div>
</div>