Javascript 选择属性为空或未指定的元素
以以下示意性html代码为例: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])') 基本上,不要 把所有
<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='']");