采用以下原理图html代码:
<div>
<span id='1' cust-attr='' />
<span id='2' />
<span id='3' cust-attr='Foo' />
</div>
现在我正在寻找一个选择器,找到所有span
,它们没有属性“cust-attr”或者其“cust-attr”值为空。
在这种情况下,这将是1和2。
我尝试了以下选择器,结果如下:
span[cust-attr!=]
选择2和3 span[cust-attr='']
仅选择1 span:not([cust-attr])
选择2 span(:not([cust-attr]),[cust-attr=''])
选择所有三个span([cust-attr=''],:not([cust-attr]))
选择1 但是,我没有找到只选择1和2的人 你知道可能吗?
请注意,我想避免:
span:not([cust-attr]),span[cust-attr='']
因为“span”实际上是一种更复杂的表达。
答案 0 :(得分:5)
基本上,不要。
将所有逻辑放入选择器并不是一种好习惯。它最终会在计算上非常昂贵(因为这些部分需要在解释之前从字符串中解析出来)并且非常混乱。请改用filter
方法的美感:
$('span')
.filter(function(){
return !$(this).attr('cust-attr');
});
这将从选择中删除cust-attr
为非空字符串的所有元素。
答案 1 :(得分:5)
晚会......
...或者您可以使用CSS Selectors,并且速度是jQuery答案的10倍......)
document.querySelectorAll("input:not([id]), input[id='']");
答案 2 :(得分:2)
为什么不先选择所有SPAN然后过滤掉选择? E.g。
$('span').filter('[cust-attr=""],:not([cust-attr])')