使用 filter() 根据 parents 过滤 jquery

Using filter() to filter jquery based on parents

我在 jquery 文档中看到我可以使用 .parent() 根据 parent 过滤我匹配的元素。但是在这个过程中,我最终得到的结果是parent个元素的集合,而不是原来的元素集合。所以我看到我可以使用过滤器来实现我想要的。但是我发现很少有关于如何使用过滤器根据 parent.

进行过滤的文档

比如我的html是:

<div id="social">
    <a href="www.facebook.com">Facebook</a><br/>
    <a href="www.twitter.com">Twitter</a><br/>
</div>
<div id="topsites">
    <a href="www.facebook.com">Facebook</a><br/>
    <a href="whosebug.com">Stack Overflow</a><br/>
</div>

我想获取一组元素,其中包含 <a> 标签,在其 href 属性中具有 facebook,但在 social div parents.

我怀疑代码会是这样的:

$('a[href*="facebook"]').filter( ... ).click(function() {

});

但我完全不知道在过滤器上放什么。 "parent#social"

另一种表达方式是使用过滤函数。

$('a[href*="facebook"]').filter(function(index) {
    return ...
}
.click(function() {

});

我也不知道要在...上输入什么代码。是像 this.parent.id == "social" 吗?如果可能的话,我更喜欢第一种形式,但如果只能通过使用第二种形式(过滤函数)来解决问题,那也可以。非常感谢。

I want to get a set of elements, which consist of <a> tag that has facebook in it's href attribute, but within the social div parents.

这里不需要filter,

$('#social a[href*="facebook"]')

会的。

.parent()不是过滤,是遍历。它需要一个 jQuery object,列出一个数组(大小为 [0, n) ),并生成一个新的 jQuery object 每个元素的 parent .

获取 jQuery object 和您要查找的列表要简单得多...

CSS jQuery 所基于的选择器(具有各种扩展)本质上是分层的。这意味着从某些 parent(s) 中选择特定的 children 非常简单。用于选择所需元素的 CSS 选择器是:

#social a[href*="facebook"]

如果你在 jQuery 构造函数中使用它,你会得到 object:

$('#social a[href*="facebook"]')