jquery отфильтрованный список выбрать - PullRequest
0 голосов
/ 21 октября 2009

Я закончил этот учебник по «Созданию« фильтруемого »портфолио с jQuery» из nettuts + и хотел немного его настроить.

Я бы хотел вместо того, чтобы щелкать верхнюю навигацию и фильтры каждой категории, основываясь на том, что было щелкнуто, я хочу щелкнуть один «Дизайн», и если я нажму другой «CMS», они будут отображать элементы из обеих категорий. При повторном нажатии выключит этот фильтр и покажет, что выбрано.

Итак, другими словами, я хочу, чтобы он отображал то, что я выбираю, и отменяю выбор, щелкая категорию еще раз.

Ниже приведен файл JS, который я использую:

$(document).ready(function() {
    $('ul#filter a').click(function() {
        $(this).css('outline','none');
        $('ul#filter .current').removeClass('current');
        $(this).parent().addClass('current');

        var filterVal = $(this).text().toLowerCase().replace(' ','-');

        if(filterVal == 'all') {
            $('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden');
        } else {

            $('ul#portfolio li').each(function() {
                if(!$(this).hasClass(filterVal)) {
                    $(this).fadeOut('normal').addClass('hidden');
                } else {
                    $(this).fadeIn('slow').removeClass('hidden');
                }
            });
        }

        return false;
    });
});

Любая помощь в этом была бы великолепна. Спасибо.

1 Ответ

1 голос
/ 22 октября 2009

Попробуйте сохранить массив переключаемых элементов. Я не могу это проверить, но я думаю, это близко.

РЕДАКТИРОВАТЬ : теперь проверено и работает.

$(document).ready(function() {
    $('ul#filter a').click(function() {
        $(this).toggleClass('toggled_filter').parent().toggleClass('current'); // toggle a class for its state
        $(this).css('outline','none');

        var filterValList = [];
        $('.toggled_filter').each(function(){
          // add each text item to the list
          filterValList.push($(this).text().toLowerCase().replace(' ','-'));
        });

        if($.inArray('all', filterValList) != -1 || filterValList.length === 0) {
          $('ul#filter li:first').addClass('current');
              $('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden');
        } else {
              $('ul#filter li:first').removeClass('current');
              $('ul#portfolio li').each(function() {
                 var classes = $(this).attr('class').split(/\s+/);
                 // go through each of the classes on each element 
                 // and hide them if they aren't toggled on
                 var match_found = false;
                 for(var i in classes){  
                   if($.inArray(classes[i], filterValList) != -1) {
                     match_found = true;
                   }
                 }
                 // check and see if anything matched
                 if(!match_found){
                   $(this).fadeOut('normal').addClass('hidden');
                 } else {
                   $(this).fadeIn('slow').removeClass('hidden');
                 }

              });
        }
        return false;
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...