jQuery选择器返回没有特定类的元素隐藏的所有元素

时间:2013-02-07 16:50:56

标签: jquery

是否可以编写单个选择器来查询具有隐藏父级的所有元素,其中隐藏父级没有特定的类。

例如,如果给出下面的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>

5 个答案:

答案 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

http://jsfiddle.net/ExplosionPIlls/zXmXL/3/

答案 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) > *")