我想知道如何构建一个CSS选择器来匹配同时没有两个给定属性的元素。我试过了
tagName:not([attra][attrb])
我希望tagName
同时:not
和 [attra]
的所有[attrb]
不幸的是,Firefox和Chrome(稳定和Canary)都说
'tagName:not([attra][attrb])' is not a valid selector.
虽然tagName[attra][attrb]
,但tagName:not([attra]):not([attrb])
有效,但自然不会返回我想要的内容。
答案 0 :(得分:4)
使用多个选择器似乎可以解决问题。
DEMO: http://jsfiddle.net/4V3y5/
document.querySelectorAll("p:not([attra]),p:not([attrb])");
第一遍选择所有p
个元素而不选择attra
,这将排除两个元素。
第二遍选择没有p
的所有attrb
元素,再次排除两个元素。
答案 1 :(得分:3)
单个:not()
语句不可能,但使用多个选择器是可以的:
div:not([attra]):not([attrb]), div[attra]:not([attrb]), div[attrb]:not([attra])
等同于:不包含attra
或attrb
的div,包含属性attra
但不包含attrb
的div或具有属性{{1}的div但不是attrb
。
如果您需要使用两个以上的属性,这将会非常快速地获得更多详细信息。