带有 querySelectorAll 的无效选择器 :不带后代
Invalid selector with querySelectorAll :not with descendants
>我有一个情况,我需要在页面上选择不同的节点组,我需要排除某些子元素。我最常见的任务是选择所有<img>
元素,而不是某些元素的后代。
以我的小提琴为例:http://jsfiddle.net/rjdbys13/我有 2 个<div>
,每个里面都有一个<img>
。我想选择所有图像,但不选择其中一个<div>
图像(两者都具有不同的类)。
为此,这在jQuery和Sizzlejs中有效,我可以使用像img:not(.amazingDiv img)
这样的选择器。据我了解,这选择所有不是 <div>
s 后代的<img>
元素,其类包含 amazingDiv
.正如我所说,这对支持更详细的:not
语法的库非常有效,但它失败并querySelectorAll
错误:
Uncaught SyntaxError: Failed to execute 'querySelectorAll' on 'Document': 'img:not(.amazingDiv img)' is not a valid selector.
真的很想避免对我收集的元素进行任何"后处理",那么有没有办法通过使用querySelectorAll
来实现我正在寻找的东西?(我也尝试使用库"qwery","micro-selector"和"nut")
编辑:由于我搜索选择器组合以支持一些复杂的:not
功能是徒劳的,我选择使用第三方选择器引擎 - 捷豹(github.com/alpha123/Jaguar)。这不是想法,而且速度较慢,但最终结果可能更有效,因为我不需要"后处理"我的结果。
根据规范,您使用的选择器不正确:
选择器级别 3 不允许任何超出单个简单内容的内容:not() 伪类中的选择器。
否定伪类 :not(X) 是一种函数表示法,采用简单选择器(不包括否定伪类本身)作为论点。它表示一个不由其表示的元素论点。
不幸的是,目前使用标准CSS选择器无法实现您想要做的事情。目前,:not()
一次只接受一个简单的选择器,因此它的使用非常有限。
在即将推出的标准中,:not()
将进行升级,以允许组合器和复杂的选择器,使其功能与选择器库提供的功能相媲美。这意味着,一旦浏览器开始实施增强功能,最终,您正在使用的内容将成为有效的选择器。
但与此同时,假设您还不能使用不使用:not()
的其他选择器来选择所需的元素,如果不选择所有img
元素并单独排除.amazingDiv img
,您将无法执行此操作(在这些元素上表示"后处理")。
如果您忽略div 本身,则其下的所有图像都会被自动丢弃。
document.querySelectorAll("#parent div:not(.amazingDiv2) img")
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 在动态创建的元素上获取对特定选择器的引用
- AngularJS-在JSON选择器中使用变量名
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- jQuery最近父级的数据属性选择器
- 为什么不'在JQuery中找到第二个css选择器的工作
- 为什么 .focus() 不起作用,而 .css(“color”,“red”) 在同一个选择器上起作用
- jquery IE7中的第n个选择器
- Webdriver.io pageObject模式-通过传递参数来定义元素选择器
- jquery日期选择器年份范围默认值
- jquery日期选择器失去了交互性
- 带有 querySelectorAll 的无效选择器 :不带后代
- 父后代 jquery 选择器中出现奇怪的错误
- $(这个)选择器和他的后代
- 选择器:仅获取特定级别的后代的最快方法
- jQuery .click 不触发后代选择器
- jQuery:通过选择器查找后代,并通过索引设置值
- jQuery后代选择器性能
- jQuery 选择器来查找所有非嵌套的后代