Reputation: 2127
I've got Isotope working with multiple select filters : https://codepen.io/share-a-dream/pen/dRXgyW
But I want to disable in real time the option in select that will not provide any results so the user will never see empty results.
I use this function get back my elements :
$grid.isotope( 'on', 'layoutComplete', function() {
var elems = $grid.isotope('getFilteredItemElements');
console.log( elems.length + ' filtered items' );
$(elems).each(function() {
var filterClass = $(this).attr("class");
var filterClassArray = filterClass.split(' ');
console.log(filterClassArray);
jQuery.each( filterClassArray, function( i, val ) {
$('[data-filter=".'+ val + '"]').removeAttr('disabled', 'disabled');
});
});
});
I'm getting a list of class, but it's not working perfectly.
Upvotes: 1
Views: 855
Reputation: 3614
EDIT:
I removed Argentina from HTML source, and now function removeEmpty
, the one that runs before isotope LOADED, console.log's the one that is missing and removes it from dropdown...
var $grid = $('.filtr-container').isotope({
itemSelector: '.filtr-item',
isInitLayout: false
});
// store filter for each group
var filters = {};
// function to remove empty dropdown filters
function removeEmpty(){
var DROP = $('select option:not([data-filter=""])');
// list of all class in html
var strall = ''; $('.filtr-item').each(function(el){ strall += $(this).attr('class') });
// remove select if not in strall.. TODO : needs improvement, this is kind a hack
DROP.each(function(el){
var nowfilter = $(this).attr('data-filter').replace('.', ''); // co_kenya
if( strall.indexOf( nowfilter ) == -1 ){
console.log( 'this one is missing ' + nowfilter );
$(this).remove();
}
});
}
$grid.on('layoutComplete', function() {
// before layout, try to filter dropdown
removeEmpty();
});
// now make layout
$grid.isotope('layout');
.ngos {
padding:20px;
border:1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://unpkg.com/isotope-layout/dist/isotope.pkgd.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<div class="container">
<div class="row">
<div class="zone filter clearfix">
<div class="col-md-4">
<h3>The cause:</h3>
<label>
<select data-filter-group="category">
<option data-filter="" selected> All </option>
<option data-filter=".ca_Education"> Education</option>
<option data-filter=".ca_Environment"> Environment</option>
<option data-filter=".ca_Health"> Health</option>
</select>
</label>
</div>
<div class="col-md-4">
<h3>The country:</h3>
<label>
<select data-filter-group="country">
<option data-filter="" selected> All </option>
<option data-filter=".co_Argentina"> Argentina</option>
<option data-filter=".co_Bolivia"> Bolivia</option>
<option data-filter=".co_Chile"> Chile</option>
<option data-filter=".co_Kenya"> Kenya</option>
<option data-filter=".co_Madagscar"> Madagscar</option>
<option data-filter=".co_SouthAfrica"> South Africa</option>
</select>
</label>
<div style="display: none" class="btn">Search</div>
</div>
</div>
</div>
<div class="filtr-container js-ngo-container">
<div class="ngos filtr-item co_Bolivia ca_Education" data-category="">
<div class="col-lg-6 col-sm-6 col-xs-12">
<div class="zone content">
<h2>co_Bolivia ca_Education</h2>
</div>
</div>
</div>
<div class="ngos filtr-item co_SouthAfrica ca_Health" data-category="">
<div class="col-lg-6 col-sm-6 col-xs-12">
<div class="zone content">
<h2>co_SouthAfrica ca_Health</h2>
</div>
</div>
</div>
<div class="ngos filtr-item co_Chile ca_Environment" data-category="">
<div class="col-lg-6 col-sm-6 col-xs-12">
<div class="zone content">
<h2>co_Chile ca_Environment</h2>
</div>
</div>
</div>
<div class="ngos filtr-item co_Madagscar ca_Environment" data-category="">
<div class="col-lg-6 col-sm-6 col-xs-12">
<div class="zone content">
<h2>co_Madagscar ca_Environment</h2>
</div>
</div>
</div>
<div class="ngos filtr-item co_Kenya ca_Environment" data-category="">
<div class="col-lg-6 col-sm-6 col-xs-12">
<div class="zone content">
<h2>co_Kenya ca_Environment</h2>
</div>
</div>
</div>
</div>
</div>
Upvotes: 1