Alo*_*234 2 javascript css jquery dom selector
我想选择一个带有两个not子句的特定节点,但到目前为止我没有成功.我需要做的是,选择一个元素,其div包含字符串0008,但它不是10008,也它不包括该标签的"风格",因此,在理论上它应该工作那样:
document.querySelectorAll(" div[id*='0008']:not([id='10008'][style])")
Run Code Online (Sandbox Code Playgroud)
但是,正如您可能怀疑的那样,它不会那样工作.
document.querySelectorAll(" div[id*='0008']:not([id='10008'])")
document.querySelectorAll(" div[id*='0008']:not([style])")
Run Code Online (Sandbox Code Playgroud)
当然,它们都可以完美地单独工作.
不是10008,也不是......
这不是你当前的选择器检查的,它测试它是否没有(id和style属性).请改用:
div[id*='0008']:not([id='10008']):not([style])
Run Code Online (Sandbox Code Playgroud)
您的原始解决方案也不是有效的选择器,因为:not()可能只包含一个简单的选择器,而您有两个选择器.然而,像jQuery的sizzle引擎这样的选择器库可能会支持它们.所以使用jQuery,以下内容也可以正常工作:
div[id*='0008']:not([id='10008'],[style])
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,您试图排除与两个不需要的选择器之一匹配的元素,而不是与它们都匹配的元素。在 jQuery 中,多重选择器(然后将匹配所有不需要的元素,然后被否定)只是一个逗号分隔的列表。因此你只需这样做:
$("div[id*='0008']:not([id='10008'],[style])")
Run Code Online (Sandbox Code Playgroud)
来自jQuery 文档(因为这个问题被标记为 jQuery):
内部接受所有选择器
:not(),例如::not(div a)和:not(div,a)。