1

I have an element like so:

<div id="foo">
  <a href="#" class="some">click me</a>
  <div id="bar">
     <a href="#" class="some">click me too</a>
  </div>
</div>

and I need to select the a elements that are not inside bar. Problem is I can't use children(), because my foo is much more complex than above.

Question:
Is there a way to select "some" elements from a foo and explicitly excluding "some" elements from bar?

4

6 回答 6

3

如果锚元素可能并不总是您的直接子元素,则foo可以使用该filter()方法。

var anchors = $("#foo a").filter(function(){
    return !$("#bar").find(this).length;
});

工作示例 http://jsfiddle.net/v63tC/

于 2013-04-23T08:39:37.867 回答
2

您可以使用.filter()$.contains()来解决这个问题

var $bar = $('#bar');
var items = $('#foo a.some').filter(function() {
    return !$.contains($bar[0], this)
})

演示:小提琴

于 2013-04-23T08:43:20.677 回答
1

可能带有>直接子符号:

$('#foo > a')

你可以省略一些元素.not()

$("#foo a").not('#bar a').length;

小提琴

于 2013-04-23T08:37:34.923 回答
1

既然您提到您的#foo元素比示例复杂得多,那么假设您需要选择的不仅仅是直接后代是否安全?如果是这样的话,我建议如下:

$('#foo a.some').filter(function() {
    return $(this).parents('#bar').length === 0;
});

这会选择中的所有 <a>元素#foo,然后将它们过滤掉,以便只保留那些没有祖先的id元素bar

于 2013-04-23T08:41:40.543 回答
0

你可以这样做(假设变量foo是你的#foo

var a = foo.find('> a');
于 2013-04-23T08:36:51.190 回答
0

您可以使用子选择器来完成您的第一个任务(<a>从 获取所有元素foo):

$('#foo > a'). ...
于 2013-04-23T08:37:19.480 回答