找不到“不相等”的 css 属性选择器

我想针对属性“ foo”有值的 div 元素。

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

我已经试过这个 css,但它不工作:

[foo!='']
{
background: red;
}
72876 次浏览
:not([foo=''])
{
background: red;
}

Http://jsfiddle.net/gslvuys0/

您可以使用

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

小提琴

看看这个

像这样使用代码:

div[foo]:not([foo=''])
{
/* CSS Applied to divs having foo value Not nothing (or having a foo value assigned) */
}

接受的答案的一个问题是,它还将选择根本不具有 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'])

顺便说一下,如果你想选择除了具有特定值的元素之外的所有具有特定属性的元素,你可以这样做:

[data-foo]:not([data-foo="foo"]) {
/* matches <div data-foo="bar"> but not <div data-foo="foo"> or <div> */
}