jQuery选择器:不要在给定类的div中选择输入

时间:2014-07-15 07:29:42

标签: javascript jquery html jquery-selectors

我有这个示例代码:

<div class='root container'>
    <div>
        <input a ...>
        <input b .......>
        <submit submit1 doing some magic ajax... -> $(this).closest('div.container').find(':input') ==> a,b - not a,b,c,d>
    </div>
    <div class='container'>
        <div>
            <div>
                <input c ...>
                <input d .......>
                <submit submit2 doing some magic ajax... -> $(this).closest('div.container').find(':input') ==> c,d>
            <div>
        </div>
    </div>
</div>

输入没有目标类。我想要.container下的选择输入,而不是来自嵌套.container的输入。

起点是'submit',其中click()行动;我得到.container$(this).closest('.container')),现在我需要知道,如何只选择非嵌套的输入:

如果我在submit1,我会获得输入a, b,而不是a, b, c, d。如果我在submit2,我会c, d

HTML结构可能会有所不同,因此我无法使用准确的选择器(例如div&gt; input,...)。

2 个答案:

答案 0 :(得分:1)

如果您希望获取inputs内的所有.container,那么您没有inputs的后代.root.container,除了儿童内部的.container var $inputs = $('.root').find('input').filter(function() { return !$(this).closest('.container').length || $(this).closest('.container').hasClass('root'); }); ,您可以这样做:

input

所以你在.root内找到所有.container,然后过滤它们,只返回那些没有祖先.container,或者有一个祖先{{ 1}}这是.root

Here's a fiddle

答案 1 :(得分:1)

最后,你指出我正确的方法 - 解决方案(以及我想要的开头)是this fiddle :):

var container = $('#submit-2').closest('div.container');
var result = $('#result');
container.children(':not(div.container)').find(':input:not([type="submit"])').each(function (k, v) {
    result.append($('<li/>').text('found: ' + $(v).attr('name')));
});
@billyonecan说得对,输入不是后代,所以很少谷歌指向我另一个功能 - .children,接受选择器作为过滤器,所以我赢了:) - 更多的小提琴。

并且 - 谢谢你的帮助