Почему изображения исчезают в jQuery Quicksand? - PullRequest
0 голосов
/ 03 ноября 2011

Я не понимаю, почему изображения исчезают, когда я нажимаю на фильтр.


Код скрипта Quicksand (находится в файле с именем jquery.custom.js):

jQuery.noConflict();
jQuery(document).ready(function($){
    // Clone applications to get a second collection
    var $data = $("#portfolio-items").clone();

    //NOTE: Only filter on the main portfolio page, not on the subcategory pages
    $('#portfolio-terms ul li').click(function(e) {
        $("ul li").removeClass("active");   
        // Use the last category class as the category to filter by. This means that multiple categories are not supported (yet)
        var filterClass=$(this).attr('class') //.split(' ').slice(-1)[0];
        filterClass = filterClass ? filterClass.split(' ').slice(-1)[0] : '';

        if (filterClass == '.all current') {
            var $filteredData = $data.find('#portfolio-');
        } else {
            var $filteredData = $data.find('#portfolio-[data-type=' + filterClass + ']');
        }
        $("#portfolio-items").quicksand($filteredData, {
            duration: 800,
            easing: 'swing',
        });     
        $(this).addClass("active");             
        return false;
    });
});


Здесь вы можете увидеть код PHP портфелей и условий : http://snipt.org/Mnp8

Можете ли вы помочь мне, пожалуйста?
Спасибо!

1 Ответ

0 голосов
/ 03 ноября 2011

$ data.find не выполняет поиск по атрибутам напрямую. Что бы работать, это что-то вроде замены

var $filteredData = $data.find('#portfolio-');

с

var $filteredData = $data.find('li[id|="portfolio"]');

Это будет искать во всех ли там, где идентификатор начинается с портфолио

Следующая строка ссылается на LI, а не на тег. Для элемента LI нет класса.

$(this).attr('class') //.split(' ').slice(-1)[0];

при условии, что вы поместили класс в элемент LI, вы можете изменить эту строку и изменить (я не уверен насчет этого):

var $filteredData = $data.find('#portfolio-[data-type=' + filterClass + ']')

до:

var $filteredData = $data.find('li.' + filterClass);

Пожалуйста, посмотрите на
http://jsfiddle.net/bhoover10001/SzjhS/ и посмотрим, является ли это более или менее необходимой вам функциональностью.

A) Вы не поместили класс в элементы LI, по которым щелкают.

<li class="all"><a href="">All</a><span>/</span></li>
<li class="term-4"><a href="" 
data-value="term-4" title="View all items filed under Colours">Colours</a> <span>/</span>
</li>
<li class="term-3" >
<a href="" data-value="term-3" title="View all items filed under Fotografie">Fotografie</a> <span>/</span>
</li>

B) data-id является обязательным элементом элемента LI отображаемых вами элементов. Например:

<li id="portfolio-12" class="term-4 visible" data-id="post-12">

C) Класс фильтра должен быть первым классом в каждом из портфелей. Вы неправильно указали класс фильтра:

filterClass = filterClass ? filterClass.split(' ')[0] : '';

D) Ваше условие "ВСЕ" было закодировано неправильно:

if (filterClass == 'all')
...