2009-05-18 5 views
14

У меня есть веб-сайт с длинным списком имен. Чтобы сделать его более надзирать-состояние, я хотел бы поставить текстовую ссылку, чтобыjQuery: отфильтровать элементы через класс?

(на нагрузке) показать все

(по нажатию слова «груши») скрыть все элементы с классом = "яблока «

(щелкать слово„яблоки“) скрыть все элементы с классом =» груша»

(на кнопку„показать все“) показать все

Я полагаю, что было бы, как действительно упрощена версия «как вы печатаете».

Существует ли для этого плагин? Я даже не знаю, с чего начать!

ответ

20

хмм .. если у вас есть список, как следующее:

<span class="apple">red apple</span> 
<span class="apple">green apple</span> 
<span class="pear">big pear</span> 
<span class="pear">little pear</span> 

следующий будет показать все:

$("span.*").show(); 

следующие бы скрыть все элементы с классом = «„яблоко“» :

$("span[class='apple']").hide(); 

или вы могли бы пойти с скрывая все, что не имеет «класс =„грушу“»:

$("span[class!='pear']").hide(); 
+7

"span [class = 'apple']" будет выбирать интервалы с ТОЛЬКО яблоком в классе. Вы должны использовать «span.apple», чтобы у вас был класс = «яблочный плод». – Joel

+0

Или просто $ (". Apple"). Hide(); например, – Martin

15

Только что столкнулся с этим сообщением, я знаю, что он старый, но, честно говоря, ни один из данных ответов не очень полезен. На мой взгляд, вы можете отфильтровать элементы с помощью фильтра с помощью : не, как в filter(':not()').

Как Джоэл Поттер заявил, что с помощью $("span[class='apple']").hide(); будет выбрать только пролеты ровно с одним именем класса, яблоко. Если присутствует несколько классов (что весьма вероятно), то такой подход не будет работать.

Если вы щелкните по слову, например. груши, вы можете отфильтровать элементы, которые делают не, содержат класс pears.

$('span').show().filter(':not(.pears)').hide(); 

и вы сделали;)

+2

Если вы хотите отфильтровать несколько элементов, не забудьте использовать этот синтаксис: '$ ('span'). show(). filter (': not (.pears, .apples, .oranges, .etc)') .hide(); ' – Microcipcip

+0

Ницца. Это единственное решение для меня. – J0ANMM

11

Чтобы отфильтровать элементы, которые содержат данный класс или любое другое значение атрибута, используя Attribute Contains Word Selector будет хорошим решением:

$("span").filter("[class~='apple']") 

На самом деле , для атрибута класса еще проще просто написать:

$("span").filter(".apple") // or: 
$("span.apple") 

[Thi s также то, что Джоэл Поттер написал в своем комментарии к this answer.]

Таким образом, вы будете в состоянии соответствовать все ниже:

<span class="apple">...</span> 
<span class="apple fruit">...</span> 
<span class="fruit apple sweet">...</span> 

Так что, когда вы не на 100% уверен, что вы будете есть только один класс установлен на элементе, использование Оператор ~=.

+0

+1 более короткий код, и мне просто нравится использовать '~': D – dbf

Смежные вопросы