1

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

例如,给定下面的 HTML,它只会选择 Field2,因为它的父元素是隐藏的,并且隐藏它的父元素没有“选项卡”类。

<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>
4

5 回答 5

0

尝试这个:

$("input").filter(function() { 
    var parent = $(this).parent();
    return parent.css("display") == "none" && parent.not(".tab");
}
于 2013-02-07T16:56:32.573 回答
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是因为 all <head>is :hidden

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

于 2013-02-07T16:56:51.213 回答
0

这个怎么样?

$('div:not(.tab):hidden input');
于 2013-02-07T16:54:51.107 回答
0
$(':hidden:has(*)').filter(function(){
    return !this.class;
}).find('*').dojQueryFuncHere();

虽然我必须说这不是最好的做法,但查询“某事” -*

于 2013-02-07T16:53:24.393 回答
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) > *")
于 2013-02-07T17:15:36.687 回答