我需要使用jquery的“find”选择器来获取所有具有“field_container”类的div。问题是我不能在DOM树中过深。
这是我简化的HTML结构:
<div id='tab_0'>
<div id='form_content'>
<div class='field_container'>
<span>Div 1</span>
<div class='field_container'>
<span>Div 1.1</span>
</div>
</div>
<div class='field_container'>
<span>Div 2</span>
</div>
<div class='field_container'>
<span>Div 3</span>
</div>
</div> <!-- Closing form_content div//-->
</div> <!-- Closing tab_0 div//-->
我对“tab_0”div有一个初始引用。从它开始,我需要获取所有“field_container”div,不包括子“field_containers”。
我试过这个:
$('#tab_0').children('.field_container') -> doesnt work, because the "field_container" divs arent direct children.
$('#tab_0').find('.field_container') -> doesnt work, because "Div 1.1" is also returned. I only need the first-level ones (Div1, Div2, Div3).
我无法更改我的初始引用,它必须是“tab_0”。
答案 0 :(得分:6)
有几种可能解决这个问题。
一个相当快的问题是:
$('#tab_0').children('#form_content').children('.field_container')
由于它限制了每个只遍历一个级别的DOM树。我不完全确定,但这应该比具有复杂选择器的find()
更快(但在每种情况下都更简单)。
答案 1 :(得分:3)
对于比当前示例更复杂的过滤,您应该使用过滤器。这就是诀窍:
$('#tab_0').find('.field_container').filter(function(){return $(this).parent()[0].id === "form_content"}).each(function(){...});
答案 2 :(得分:1)
嵌套是否一致?如果是这样,你可以这样做:
$('#tab_0').find('#form_content > .field_container');
如果没有,你可以这样做(尽管效率较低):
$('#tab_0').find('.field_container:not(.field_container .field_container)');