0

以下代码中哪种方法最好:

$('#navs li').find('.activenav').removeClass('activenav');
$('#navs li').filter('.activenav').removeClass('activenav');

或者我可以这样使用吗

$('#navs li').find('.activenav').filter('.activenav').removeClass('activenav');

or 

$('#navs li').filter('.activenav').find('.activenav').removeClass('activenav');

如果我这样做会发生什么?


更新

我可以绑定到 find 和 filter 因为我的代码有时需要查找并且有时需要进行过滤

4

5 回答 5

6

该方法在当前匹配元素find搜索匹配元素。

filter方法当前匹配元素集中搜索匹配元素。

考虑这个 HTML:

<div class="foo">
  <a class="foo">Bar</a>
</div>

而这个jQuery:

$('div').filter('.foo').hide(); // hides the div with the class "foo"

$('div').find('.foo').hide(); // hides the child anchor with the class "foo"

请注意,两者都会导致隐藏元素,但它们针对的是不同的元素。

于 2013-09-23T11:50:56.767 回答
1

filter() – search through all the elements.

将匹配元素集减少为匹配选择器或通过函数测试的元素

find() – search through all the child elements only.

获取当前匹配元素集中每个元素的后代,由选择器过滤。

于 2013-09-23T11:51:24.493 回答
0

filter 过滤来自元素集合的结果,而从元素中find 查找结果(以元素为父元素进行搜索)。

SO代码的一个例子:

$("div").filter("#notify-container");
//Gives us a result, as we have a collection of `div` elements and **filter** the already made collection to only include `div`'s with the ID `notification-container`

$("div").find("#notify-container")
//Gives us no results as it tries to find `#notify-container` elements **inside** the `div` elements.
于 2013-09-23T11:52:26.630 回答
0

前两行不等价。

.find查找当前 jQuery 对象的后代,因此第一行查找li具有该类的所有子对象。

.filter创建一个新的 jQuery 对象,它只包含与选择器匹配的原始对象的那些元素,因此第二行查找所有li实际拥有该类本身的元素。

鉴于此,第一个替代方案实际上是一个无操作(.filter不会从集合中删除任何项目)但第二个是不正确的,因为它会首先找到具有li该类的任何元素,然后只对这些元素的任何子元素进行操作那有那个班。li

于 2013-09-23T11:51:32.590 回答
0

filter()搜索 jQuery 数组并查找您选择的选择器,使用您选择find()的选择器搜索所有子项

更新

是的,您可以像这样使用 find() 和 filter()$('.myClass').find('.myChildClass').filter('.myFilterClass');

于 2013-09-23T11:51:51.343 回答