#jquery #list
#jquery #Список
Вопрос:
Вот образец html, который у меня есть.
<ul id="alist">
<li class="red">...</li>
<li class="blue">...</li>
<li class="red">...</li>
<li class="green">...</li>
</ul>
Цель: выбрать все элементы в списке, у которых нет класса ‘red’, и удалить их.
Это то, что у меня есть на данный момент. Я знаю, что это близко, но либо в коде, либо где-то в селекторе ошибка.
$('#alist :not(:has(.red))').fadeOut('slow');
Я также пытался
$('#alist li :not(:has(.red))').fadeOut('slow');
$('#alist :not(:has(li.red))').fadeOut('slow');
Ни один из них не работает (очевидно). Но когда я попытался отфильтровать что-то внутри ul, это происходит. Итак, с html как:
<li><a class="red">...</li>
.
.
.
<li><a class="green">...</li>
и создал селектор jquery
$('#alist li :not(:has(a.red))').fadeOut('slow');
это работает.
Так почему jQuery не позволяет мне фильтровать классы li?
Ответ №1:
Попробуйте это:
$('#alist li a').not('.red').parent().fadeOut('slow');
При этом выбираются все теги привязки, которые теперь имеют red
в качестве класса, и родительский элемент исчезает li
Комментарии:
1. Также проверьте
:not()
селектор — медленнее в IE, быстрее в браузерах с поддержкой CSS3 ( смотрите результаты )2. @Neal: он хочет соответствовать первой версии html (поэтому нет
a
и.parent()
)3. @Dan я не совсем уверен в этом. а также не предполагайте, что OP является
he
4. @Neal: цитирую OP: «Цель: выбрать все элементы в списке, у которых нет класса ‘red’, и удалить их «. , «почему jQuery не позволяет мне фильтровать классы li?» . Что касается критики моего использования
he
, я не думаю, что в этом неофициальном сценарии это имеет какое-либо значение, тем более что имя пользователя не указывает на пол. Я не думаю, что он / она был бы оскорблен, я бы не5. @Dan я хотел поставить
:-P
в конце моего последнего комментария, думаю, я забыл это. хммм, я не знаю, чего бы ни хотел OP, OP уже выбрал, и это здесь для будущих пользователей
Ответ №2:
:has
просматривает дочерние элементы элементов. Вам просто нужно посмотреть на сам класс элемента. Итак:
$('#alist :not(.red)').fadeOut('slow');