Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在CSS选择器中否定两个属性的连接_Javascript_Css_Css Selectors - Fatal编程技术网

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

Javascript 如何在CSS选择器中否定两个属性的连接,javascript,css,css-selectors,Javascript,Css,Css Selectors,我想知道如何构建一个CSS选择器来匹配不同时具有两个给定属性的元素。我试过了 tagName:not([attra][attrb]) 因为我希望所有标记名不同时具有[attra]和[attrb] 不幸的是,Firefox、Chrome和Canary都这么说 'tagName:not([attra][attrb])' is not a valid selector. 虽然标记名[attra][attrb],但标记名:not[attra]:not[attrb]是有效的,但它自然不会返回我想要的内

我想知道如何构建一个CSS选择器来匹配不同时具有两个给定属性的元素。我试过了

tagName:not([attra][attrb])
因为我希望所有标记名不同时具有[attra]和[attrb]

不幸的是,Firefox、Chrome和Canary都这么说

'tagName:not([attra][attrb])' is not a valid selector.

虽然标记名[attra][attrb],但标记名:not[attra]:not[attrb]是有效的,但它自然不会返回我想要的内容。

使用多个选择器似乎可以做到这一点

演示:

第一次通过选择所有不带attra的p元素,这将排除同时具有attra和attra的元素


第二遍选择不带attrb的所有p元素,这同样排除了同时具有attrb的元素。

不可能使用单个:Not语句,但使用多个选择器也可以:

div:not[attra]:not[attrb],div[attra]:not[attrb],div[attrb]:not[attra]

等于:不带attra或attrb的div、带attra属性但不带attrb的div或带attrb属性但不带attra的div

如果需要使用两个以上的属性,这将很快变得更加详细


工作示例:

为什么标记名:not[attra]:not[attrb]不返回您想要的内容?从其他答案来看,这是一个AND场景和,使其成为OR,我猜这就是他要找的。@chopper,因为它不选择只有attra或attrb的元素,而不是两者都有。啊,是有意义的。下面的答案看起来不错,问题不清楚;从注释中,而不是直接从问题中,似乎选择器应该匹配类A或类B中的任何元素,但不是两者都匹配。这正是我需要的结果。你能解释一下为什么p:not[attra][attrb]无效吗?@tomalec:Because:not只接受一个简单的选择器。没有组合。所以即使是div.some_类也不起作用,而只是.some_类起作用。我需要的是匹配标记名元素的选择器&!has attra&has attrb,您的命题返回标记名has attra&!has attrb |是标记名&has attrb&!有attra。@tomalec那么你只需在开头加上div。我想他的意思是,你排除了既没有attra也没有attrb的元素。@Cookie Monster我的评论本应该解决这个问题,但我有点鲁莽。。。我用一个有效的补丁更新了我的答案。
document.querySelectorAll("p:not([attra]),p:not([attrb])");