如何通过jQuery获得没有特定属性的元素

我知道如何获得具有特定属性的元素:

$("#para [attr_all]") 

但是我怎样才能得到没有特定属性的元素? 我试试

  $("#para :not([attr_all])") 

但它不起作用。 什么是正确的方法来做到这一点?

让我举个例子:

 <div id="para"> <input name="fname" optional="1"> <input name="lname"> <input name="email"> </div> 

jQuery的:

 $("#para [optional]") // give me the fname element $("#para :not([optional])") //give me the fname, lname, email (fname should not appear here) 

我想到的第一件事(也许是次优):

 $('p').filter(function(){ return !$(this).attr('attr_all'); }); 

然而p:not([attr_all])应该可以工作,所以我认为你的代码中还有其他的东西在发生。

如果你的代码示例是你正在使用的确切代码,我认为这个问题是一个错误的空间。

 $("#para :not([attr_all])") 

应该

 $("#para:not([attr_all])") 

如果你在那里留下空间,它会select#para 后代

一个更快的方法是首先获取所有ID为para的元素(如果存在多个元素,则为无效的HTML,请考虑使用类),并使用filter(或根据HTML的构造方式来查找)方法只获取没有属性的元素,如下所示:

 $('#para').filter(':not([attr_all])'); 

这样做,你有jQuery做更less的工作,因为你只是循环通过一个较小的元素子集,以获得那些没有属性。 使用单个select器语句(如$("#para :not([attr_all])") ,将使jQuery获取所有没有该属性的元素,然后过滤它们的ID为para。

尝试$("#para [attr!=val]")

你的:not真的应该工作,但是,这让我怀疑其他事情正在发生。

有关属性select器的完整列表,请参阅jQuery Selectors文档 。

弗兰克·德罗萨(Frank DeRosa)的回答是正确的,但是由于OP确实想要find后代,所以这有点不合适。 自己尝试一下,似乎应该是按照这种方式工作的,但是不pipe你运行的是什么,都不会像':'运算符被直接用作后代。 尝试使用

 $("#para input:not([optional])") 

会留下评论,但还不能。