Как я могу использовать find + filter для возврата ценового диапазона?

У меня есть список товаров, и мне нужно вернуть только те товары, цена которых находится между ценовым диапазоном «минимум» и «максимум».

Вот полный рабочий пример, который сортирует товары по классам. Но, как вы видите, ползунок не влияет на диапазон цен, Вот полный код:

http://jsfiddle.net/p2jwz/8/

Итак, как видите, вот код .find и .filter:

  var price = data.find('li').filter(function() {
    var price = parseFloat($(this).data('price'));
   return price >= minPrice && price <= maxPrice;
}); 

Можете ли вы сказать мне, что я делаю неправильно?


person Eran Levi    schedule 04.02.2013    source источник


Ответы (2)


Вам, вероятно, нужно

var price = data.find('li').filter(function() {
    var price = parseFloat($(this).data('price'));
   return price >= minPrice && price <= maxPrice;
}); 

Предполагается, что функция filter() возвращает логическое значение, указывающее, должен ли текущий оцениваемый элемент быть включен в возвращаемую коллекцию или нет. Если вы вернете цену, будет возвращен каждый элемент, который не имеет цену === 0, поскольку положительные целые числа являются «истинными», т.е. оцениваются как истинные, когда рассматриваются как логическое значение.

У вас также есть что-то вроде

$(document).ready(function(){
...
    $(function(){
        ...
    });
});

т. е. обернул две привязки функций document.ready. Я думаю, что вы можете просто удалить внутренний. Кажется, что ваш ползунок все еще каким-то образом инициализирован, но, возможно, это может вызвать некоторые сбои в работе.

В вашей скрипке также происходит ошибка:

TypeError: sel.getElement(...) имеет значение null

person Peter Herdenborg    schedule 04.02.2013
comment
Извините, я не обновлял код, это то, что у меня есть, и оно не работает... просто посмотрите ссылку JSFiddle... Большое спасибо!! - person Eran Levi; 04.02.2013
comment
Я смотрю на вашу скрипку, и ваш код не похож на мой код выше. Что ты имеешь в виду? - person Peter Herdenborg; 04.02.2013
comment
Только что обновил его сейчас, мой код на сервере выглядит так же, как ваш.. Он не работает, вы можете посмотреть сейчас... Еще раз спасибо!! - person Eran Levi; 04.02.2013
comment
Извините, но для меня ваша скрипка выглядит так же, а ваша функция filter() просто возвращает цену. Вы уверены, что сохранили изменения? - person Peter Herdenborg; 04.02.2013
comment
Он меняет ссылку при каждом обновлении :) Вот и финал.. Еще раз извините :): jsfiddle.net/p2jwz/ 8 - person Eran Levi; 04.02.2013
comment
Пожалуйста, смотрите мой ответ для двух других наблюдений. Боюсь, я ничего не знаю о зыбучей части вашего кода, поэтому, если это не поможет, я не уверен, что искать дальше. - person Peter Herdenborg; 04.02.2013
comment
О, другой вид (кнопки) работает нормально, это просто ползунок... В любом случае, я очень ценю вашу помощь! - person Eran Levi; 04.02.2013

Окончательно! Я нашел решение, вам просто нужно вызвать функцию со всеми переменными

function showProducts($holder, data, minPrice, maxPrice) {

   var $price = data.find('li').filter(function() {
        var $price = parseInt($(this).data("price"), 10);
        return $price >= minPrice && $price <= maxPrice;
    });

            // call quicksand and assign transition parameters
        $holder.quicksand($price, {
            duration: 800,
            easing: 'easeInOutQuad'
        });
        return false;
}

Надеюсь на помощь!

person Eran Levi    schedule 04.02.2013