我有一个像这样的元素:
<div id="foo">
<a href="#" class="some">click me</a>
<div id="bar">
<a href="#" class="some">click me too</a>
</div>
</div>
我需要选择不在a
内的bar
元素。问题是我无法使用children()
,因为我的foo
比上面复杂得多。
问题:
有没有办法从foo
中选择“某些”元素并明确排除bar
中的“某些”元素?
答案 0 :(得分:3)
如果锚元素可能并非始终是foo
的直接子项,则可以使用filter()
方法。
var anchors = $("#foo a").filter(function(){
return !$("#bar").find(this).length;
});
答案 1 :(得分:2)
您可以使用.filter()和$.contains()来解决此问题
var $bar = $('#bar');
var items = $('#foo a.some').filter(function() {
return !$.contains($bar[0], this)
})
演示:Fiddle
答案 2 :(得分:1)
答案 3 :(得分:1)
由于您提到您的#foo
元素比示例复杂得多,因此可以安全地假设它不仅仅是您需要选择的直接后代吗?如果是这种情况,我建议如下:
$('#foo a.some').filter(function() {
return $(this).parents('#bar').length === 0;
});
选择 <a>
内的所有 #foo
元素,然后将其过滤掉,以便只有那些没有id
的祖先的保留bar
。
答案 4 :(得分:0)
您可以这样做(假设变量foo
是您的#foo
)
var a = foo.find('> a');
答案 5 :(得分:0)
您可以使用child selectors完成第一项任务(从<a>
获取所有foo
元素):
$('#foo > a'). ...