Javascript 选择属性为空或未指定的元素

Javascript 选择属性为空或未指定的元素,javascript,jquery,html,css-selectors,Javascript,Jquery,Html,Css Selectors,以以下示意性html代码为例: <div> <span id='1' cust-attr='' /> <span id='2' /> <span id='3' cust-attr='Foo' /> </div> 因为“跨度”实际上是一个更复杂的表达 为什么不先选择所有跨度,然后向下过滤选择?例如 $('span').filter('[cust-attr=""],:not([cust-attr])') 基本上,不要 把所有

以以下示意性html代码为例:

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

因为“跨度”实际上是一个更复杂的表达

为什么不先选择所有跨度,然后向下过滤选择?例如

$('span').filter('[cust-attr=""],:not([cust-attr])')
基本上,不要

把所有的逻辑都放在选择器中不是一个好的做法。它最终将在计算上非常昂贵(因为在解释这些部分之前需要从字符串中解析出来)并且非常混乱。请使用该方法的优点:

$('span')
    .filter(function(){
        return !$(this).attr('cust-attr');
    });
这将从所选内容中删除
cust attr
为非空字符串的所有元素。

延迟到参与方

。。。或者您可以使用jQuery,并且速度是两个jQuery答案的10倍…:)


您能让我们领略一下您复杂的表达式吗?请参阅下面对答案的评论-这是用于解析某些第三方HTML的。谢谢!看起来是个干净的好方法,嗯?这可能比较慢,因为每次迭代都要构造一个新的jQuery实例。在更现代的浏览器(那些支持
querySelectorAll
的浏览器)中,选择器将更快。请告诉我,
这个['cust-attr']
有什么问题?@J-P
这个['cust-attr']
是不可靠的跨浏览器。解决方法是
this['cust-attr']!=无效的this['cust-attr']:this.getAttribute('cust-attr')
,但由于长度过长,我没有使用它。
$('span')
    .filter(function(){
        return !$(this).attr('cust-attr');
    });
document.querySelectorAll("input:not([id]), input[id='']");