选择具有空或未指定属性的元素

时间:2011-04-02 15:43:59

标签: javascript jquery html css-selectors

采用以下原理图html代码:

<div>
  <span id='1' cust-attr='' />
  <span id='2' />
  <span id='3' cust-attr='Foo' />
</div>

现在我正在寻找一个选择器,找到所有span,它们没有属性“cust-attr”或者其“cust-attr”值为空。
在这种情况下,这将是1和2。

我尝试了以下选择器,结果如下:

  1. span[cust-attr!=]选择2和3
  2. span[cust-attr='']仅选择1
  3. span:not([cust-attr])选择2
  4. span(:not([cust-attr]),[cust-attr=''])选择所有三个
  5. span([cust-attr=''],:not([cust-attr]))选择1
  6. 但是,我没有找到只选择1和2的人 你知道可能吗?

    请注意,我想避免:

    span:not([cust-attr]),span[cust-attr='']
    

    因为“span”实际上是一种更复杂的表达。

3 个答案:

答案 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='']");

Proof

答案 2 :(得分:2)

为什么不先选择所有SPAN然后过滤掉选择? E.g。

$('span').filter('[cust-attr=""],:not([cust-attr])')