我知道如何获取具有特定属性的元素:
$("#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)
答案 0 :(得分:111)
如果您的代码示例是您正在使用的确切代码,我认为问题是错误的空间。
$("#para :not([attr_all])")
应该是
$("#para:not([attr_all])")
如果你在那里留一个空格,它会选择#para
的后代。
答案 1 :(得分:19)
我想到的第一件事(可能是次优的):
$('p').filter(function(){
return !$(this).attr('attr_all');
});
但p:not([attr_all])
应该有效,所以我认为您的代码中还会发生其他事情。
答案 2 :(得分:7)
更快的方法是首先获取ID为para的所有元素(如果有多个,则为无效HTML,请考虑使用类)并使用过滤器(或根据HTML的方式查找)构造)方法只获取没有属性的元素,如下所示:
$('#para').filter(':not([attr_all])');
这样做你让jQuery做的工作少得多,因为你只是循环一小部分元素来获得那些没有属性的元素。使用单个选择器语句(例如$("#para :not([attr_all])")
)执行此操作将导致jQuery获取没有该属性的所有元素,然后将其过滤为ID为para的元素。
答案 3 :(得分:5)
答案 4 :(得分:1)
Frank DeRosa的回答是正确的,但由于OP确实想要找到后代,所以有点过时了。自己尝试一下,它似乎应该按照它的方式工作,但是你运行的任何东西都可能不喜欢':'运算符直接用作后代。尝试使用
$("#para input:not([optional])")
本来会留下评论,但还不能。
答案 5 :(得分:0)
查看CSS3选择器文档,选择没有属性“ attr”的节点“ node”的正确方法是:
<node>:not(<node>[<attr>])
E.g.: p:not(p[align])
在您的情况下,$("#para *:not([optional])")
可行,并且可能更精确。
“ :不是”的实际语法是:
<selector1>:not(<selector2>)
此表达式中有两个选择器,它选择所有与 seletor1 匹配的节点,然后排除所有与 selector2 匹配的节点。
我会使用:
$('#para input:not(input[optional])')
/* or */
$('input:not(input[optional])',$('#para'))
/* in case jQuery has issues with :not */
$( document.querySelectorAll('#para input:not(input[optional])') )
答案 6 :(得分:0)
找到没有alt属性或空alt标签的图像标签。
$('img').each(function( index ) {
if(typeof $(this).attr('alt') === typeof undefined || $(this).attr('alt') === false ||$(this).attr('alt') === '') {
console.log(index);
}
});