Не удается найти селектор атрибутов css «не равно»

105

Я хочу настроить таргетинг на элементы div, в которых атрибут «foo» имеет значение.

<div foo="x">XXX</div>
<div foo="">YYY</div>

Я пробовал этот CSS, но он не работает:

[foo!='']
{
   background: red;
}
Адриан Рошка
источник

Ответы:

175

Используйте такой код:

div:not([foo=''])
{
    /* CSS Applied to divs having foo value Not nothing (or having a foo value assigned) */
}
Mehulmpt
источник
7

Одна из проблем с принятым ответом заключается в том, что он также выберет элементы, у которых вообще нет fooатрибута. Рассматривать:

<div>No foo</div>
<div foo="">Empty foo</div>
<div foo="x">XXX</div>
<div foo="y">YYY</div>
<div foo="z">ZZZ</div>

div:not([foo=''])выберет и первый, и второй divэлементы. Если вам нужны только divэлементы, для которых атрибут foo установлен в пустую строку, вы должны использовать:

div[foo]:not([foo=''])

Если вам нужны все элементы с атрибутом, fooкоторый не является ни yили z, вы должны использовать:

div[foo]:not([foo='y']):not([foo='z'])
муму
источник
1

Вы можете выбрать первый, используя

[foo = 'x']{
  background:red;
}

FIDDLE

Прочитайте это

Сунил Хари
источник
Предположим, есть 100 div, из которых значение foo отсутствует (foo = '') для 50 div, а другие 50 div имеют другое значение foo, например, foo = x или y и т. Д., Тогда вам нужно написать 50 селекторов, если мы будем следовать приведенному выше решению
Shoaib Chikate
2
Операция не хочет этого: «Я хочу настроить таргетинг только на первый из следующих div с помощью селектора атрибутов css»
Сунил Хари
Ваш ответ соответствует его требованиям, но не общему решению, которое дали другие люди.
Шоаиб Чикате
@ShoaibChikate Вы правы. Я хочу более универсальное решение. Я обновил вопрос, чтобы отразить это.
Адриан Рошка