递归搜索顶级匹配元素
Recursively searching for top level of matching elements
假设我有一些HTML,如下所示,并且我想搜索具有foo
类的#top
元素的后代。然而,我只想找到不是我找到的其他元素的子元素的元素。也就是说,尽管通常我想递归地搜索foo
元素,但我不想递归到foo
元素中。
<div class="foo" id="top">
<div class="bar">
<div class="foo"> <!-- Find this !-->
</div>
</div>
<div class="foo"> <!-- Find this !-->
<div class="foo"> <!-- Do not find this, because we already found parent !-->
</div>
</div>
</div>
我怎样才能最好地使用Javascript/jQuery?
编辑:对此有些困惑。上面的例子是为了说明这个问题,但它并没有封装通用解决方案应该解决的每个边缘情况,所以我在这里创建了一个更复杂的例子:http://jsfiddle.net/JQNyW/1/
这样?
$('#top').find('.foo').filter(function () { // while selecting ignore parent which also has foo
return $(this).parents('.foo').length == 1; //length is 1 since the #top also has foo
});
Fiddle
或
$('#top').find('.foo').filter(function () {
return $(this).parents('.foo:not("#top")').length == 0
}).css('color', 'red');
我可能会单独使用children()或find(
$('#top').children('.foo').attr('this','yeah');
$('#top').find('> .foo',this).attr('child','yes');
在控制台中,它只将att()添加到第一个元素中。
根据您的需要,请参阅jQuery:中的文档
http://api.jquery.com/find/
http://api.jquery.com/children/
希望这能有所帮助。
您可以使用以下选择器:
#top > .foo, :not(.foo) > .foo
无论是在jQuery中还是在原生JavaScript中。
相关文章:
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- 在元素列表中搜索给定字符串
- jQuery-在数组中搜索类似的元素
- AJAX搜索2个元素
- jQuery递归搜索类的父元素
- 如何重置搜索表单中的特定表单元素
- 使用数据表,如何在要搜索的
中指定元素 - 自动完成搜索无法正常工作,请不要迭代$中的所有元素.每个ul-li都会及时显示响应
- Angular JS根据搜索结果和点击事件更新DOM元素
- 如何在不使用任何 html 输入/搜索元素的情况下读取本地客户端文本文件
- 在元素中搜索字符串,然后将其放入条件语句中
- 当我单击chrome的输入类型=搜索元素上的X时,是否触发了任何事件
- 如何通过搜索innerHTML的内容来获取HTML元素
- 增加在选择元素HTML中搜索的时间
- 使用DOM树中的某种节点号进行元素搜索
- 隐藏Google自定义搜索元素API 2.0的搜索引擎ID
- JQuery 在渲染后搜索 dom 元素,并用其相应的值替换键
- 如何获得下一个兄弟的值,如果元素搜索特定的字符串
- 如何在鼠标悬停时将焦点设置为输入元素(搜索框)
- 我怎样才能得到这个link元素?总是显示“无法找到带有链接文本的元素”==“搜索”