我有这个示例代码:
<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,...)。
答案 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
。
答案 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,接受选择器作为过滤器,所以我赢了:) - 更多的小提琴。
并且 - 谢谢你的帮助