Ich benutze list.js und ich habe mir die API angesehen, die gefunden werden kann here. Ich kann immer noch nicht herausfinden, wie man meine Min- und Max-Preis-Filter nur zu Ergebnissen bringt, wenn sie zwischen die beiden Bereiche passen.Filtern Sie eine Liste mit minimalen und maximalen Werten
Dies ist, was ich bisher:
var options = {
valueNames: ['category', 'price']
};
var featureList = new List('piece-search', options);
$('#filter-red').click(function() {
featureList.filter(function(item) {
if (item.values().category == "Red") {
return true;
} else {
return false;
}
});
return false;
});
$('#filter-blue').click(function() {
featureList.filter(function(item) {
if (item.values().category == "Blue") {
return true;
} else {
return false;
}
});
return false;
});
$('#filter-none').click(function() {
featureList.filter();
return false;
});
$('#minPrice').on('change keydown paste input click', function(){
var minPrice = $('#minPrice').val();
featureList.filter(function(item) {
if (item.values().price >= minPrice) {
return true;
} else {
return false;
}
});
return false;
});
$('#maxPrice').on('change keydown paste input click', function(){
var maxPrice = $('#maxPrice').val();
featureList.filter(function(item) {
if (item.values().price <= maxPrice) {
return true;
} else {
return false;
}
});
});
.item {
margin: 0.5em;
padding: 0.5em;
width: 40px;
height: 40px;
float: left;
color: white;
}
.item p {
margin: 0;
padding: 0;
}
.filter {
cursor: pointer;
}
}
.sort.btn {
cursor: pointer;
}
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/list.js/1.5.0/list.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div id="piece-search">
<ul class="sort-by">
<li>
<input class="search" placeholder="Search...">
<input type="number" placeholder="min price" id="minPrice"/>
<input type="number" placeholder="max price" id="maxPrice"/>
</li>
</ul>
<ul class="filter">
<li class="btn" id="filter-none">Show all</li>
<li class="btn" id="filter-red" value="category">Only show red divs</li>
<li class="btn" id="filter-blue" value="category">Only show blue divs</li>
</ul>
<ul class="list">
<li class="item" style="background: blue">
<p class="category">Blue</p>
<p class="price">14</p>
</li>
<li class="item" style="background: red">
<p class="category">Red</p>
<p class="price">37</p>
</li>
<li class="item" style="background: blue">
<p class="category">Blue</p>
<p class="price">22</p>
</li>
<li class="item" style="background: blue">
<p class="category">Blue</p>
<p class="price">58</p>
</li>
<li class="item" style="background: red">
<p class="category">Red</p>
<p class="price">45</p>
</li>
</ul>
</div>
Ehrfürchtig diese ziemlich nahe arbeitet perfekt an. Gibt es auch eine Möglichkeit, vorhandene Filter beizubehalten und gleichzeitig den Preisfilter anzuwenden? Zum Beispiel wenn ich "Nur blaue Divs anzeigen" ausgewählt habe und dann den Preisfilter auf Min: 20 & Max: 100 setze. Damit zeigen sich nur blaue Divs mit einem Preis zwischen 20 und 100? Oder umgekehrt, wenn der Preisfilter gesetzt ist und dann ein Farbfilter ausgewählt ist, zeigen nur die kombinierten Filterergebnisse? – JMendez
Ja, um dies zu tun, müssen Sie Ihre 'li'-Tasten zB in Radio-Elemente (blau und rot) umwandeln. Dann können Sie im 'priceMin/priceMax'-Event prüfen, ob der Wert dieses Radios eingestellt ist. Wenn nein, belasse ich die if-Anweisung so, wie sie jetzt ist. Wenn zum Beispiel Rot markiert ist, geben Sie nur dann True zurück, wenn der Preis korrekt ist UND 'item.values (). Category ==" Red "'. – makshh
Perfekt, danke! – JMendez