是否可以编写单个选择器来查询具有隐藏父级的所有元素,其中隐藏父级没有特定的类。
例如,如果给出下面的HTML,它只会选择Field2,因为它的父项是隐藏的,而隐藏它的父元素没有“tab”类。
<div class="tab" style="display: none;">
<div>
<input name="Field1" />
</div>
<div style="display: none;">
<input name="Field2" />
</div>
</div>
<div class="tab" style="display: none;">
<div>
<input name="Field3" />
</div>
</div>
<div class="tab">
<div>
<input name="Field4" />
</div>
</div>
答案 0 :(得分:0)
$(':hidden:has(*)').filter(function(){
return !this.class;
}).find('*').dojQueryFuncHere();
虽然我必须说这不是最好的事情,但要查询“某事” - *
答案 1 :(得分:0)
这个怎么样?
$('div:not(.tab):hidden input');
答案 2 :(得分:0)
试试这个:
$("input").filter(function() {
var parent = $(this).parent();
return parent.css("display") == "none" && parent.not(".tab");
}
答案 3 :(得分:0)
当隐藏父级时,其后代也被视为隐藏,因此:hidden
选择器将无法完全满足您的需要。唯一的方法是在这种情况下实际检查style
属性。
$("[style*='display: none']:not(.tab) >");
这会选择style="display: none"
的所有元素(:
和none
之间的空格是必需的,但您也可以编写另一个不需要它的选择器,并且没有.tab
上课。
如果父级可以被style
之外的其他东西隐藏,例如类,这显然不起作用。在这种情况下,除非您想要解析样式表并检查每个父类及其类,否则您无法做很多事情。
http://jsfiddle.net/ExplosionPIlls/zXmXL/1/
与$("body :hidden:not(.tab) >")
交手。使用body
是因为所有<head>
都是:hidden
。
答案 4 :(得分:0)
这是你要找的吗?
$("div:not(.tab) > *:hidden")
或
$("div:hidden:not(.tab) > *:hidden")
----编辑---- 你可以这样做
$("div[style='display: none;']:not(.tab) > *")
但这不是一个好方法。我宁愿改变那些style ='display:none;'到css类,然后像这样运行;我在这里测试了http://jsfiddle.net/bighostkim/KaaYc/
$("div.noShow:not(.tab) > *")