JQuery - Простая система фильтров - как выбрать элементы, которые не имеют определенных классов? - PullRequest
0 голосов
/ 12 октября 2011

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

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

Самое логичное решение, которое я могу придумать, состоит в том, чтобы после переключения элемента фильтра увидеть, какие категории по-прежнему установлены как видимые, и скрыть элементы, которые не отображаются.

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

Я пытаюсь найти отмеченные категории (каждый элемент фильтра имеет идентификатор: имя_фильтра-категории ):

$('.filter-checked').each(function(){
    checkedCategories = checkedCategories + ('.' + $(this).attr('id').replace('filter','category'));
});

А затем исчезают элементы, у которых нет класса элемента, который больше не проверяется:

$(filterCategory).filter(function(){
return $(not(checkedCategories));
}).fadeTo(500,0.1);

где:

var filterCategory = '.'+$(this).attr('id').replace('filter','category');

(это элемент фильтра, по которому щелкнули)

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

Спасибо !!

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Я считаю, что вы ищете метод not: http://api.jquery.com/not/

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

0 голосов
/ 12 октября 2011

U может проверить, есть ли у элемента определенный класс или нет

Предположим, что имя класса 'foo' и id элемента '' что-то '

if($('#something').hasClass('foo')){
   //if this element has class foo
}
else{
   //if this element dont have class foo
}

проверить это здесьhttp://jsfiddle.net/uhSKm/

...