如何否定CSS选择器中两个属性的连接

时间:2014-03-20 23:44:17

标签: javascript css css-selectors

我想知道如何构建一个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])有效,但自然不会返回我想要的内容。

2 个答案:

答案 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])

等同于:不包含attraattrb的div,包含属性attra但不包含attrb的div或具有属性{{1}的div但不是attrb

如果您需要使用两个以上的属性,这将会非常快速地获得更多详细信息。

工作示例:http://jsfiddle.net/e67uN/2/