OP кажется, что ваш код, как правило, работает, я предполагаю, что вы столкнулись с некоторыми условиями гонки, потому что ваш код многократно анимировался. Я разблокировал ваш код и реорганизовал код, чтобы вы выполнили две операции вместо 4. Я также включил вашу функцию фильтра в отдельную функцию. IMO. Внеся эти изменения, вы улучшаете читаемость и поддерживаемость кода с течением времени.
// Translating 'min' and 'max' to numbers that we can compare against
// This makes it easier to perform the <= >= checks
if (minValue === 'min-default') {
minValue = 0;
}
if (maxValue === 'max-default') {
maxValue = 1000; // This should probably find the highest value from the available options
}
// Moved this out to its own function that compares the entire range at once
function filterBedroomsRange(index, item) {
var bedrooms = $(item).attr('data-bedrooms');
// Validate against the selected range together to avoid double filter/double animation issues
// The number of bedrooms must be greater than or equal to the min value, and less than, or equal to the maxValue
return bedrooms >= minValue && <= maxValue;
}
// Hide items that don't match the range
properties.find('.property-item').filter(function(index, item) {
// Return the negative of `filterBedroomsRange` to find items to hide
return !filterBedroomsRange(index, item);
}).fadeOut('fast');
// Show items that do match the range
properties.find('.property-item').filter(filterBedroomsRange).fadeIn('fast');
Кодепен: http://codepen.io/anon/pen/VKdPNB