以下代码中哪种方法最好:
$('#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,因为我的代码有时需要查找并且有时需要进行过滤
答案 0 :(得分: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"
请注意,两者都会导致隐藏元素,但它们会针对不同的元素。
答案 1 :(得分:1)
<强> filter() – search through all the elements.
强>
将匹配元素集合减少到与选择器匹配的元素或传递函数的测试
的 find() – search through all the child elements only.
强> 的
获取当前匹配元素集中每个元素的后代,由选择器过滤。
答案 2 :(得分:0)
前两行不等同。
.find
查找当前jQuery对象的后代,因此第一行查找具有该类的li
的所有子项。
.filter
创建一个新的jQuery对象,该对象仅包含与选择器匹配的原始对象的那些元素,因此第二行查找实际拥有该类的所有li
。
鉴于此,第一个替代方案实际上是无操作(.filter
不会从集合中删除任何项目)但第二个是不正确的,因为它将首先找到任何li
该类,然后仅对那些也拥有该类的li
元素的子进行操作。
答案 3 :(得分:0)
filter()
搜索jQuery数组并查找您选择的选择器,find()
使用您选择的选择器搜索所有子项
<强>更新强>
是的,您可以同时使用find()和filter(),例如$('.myClass').find('.myChildClass').filter('.myFilterClass');
答案 4 :(得分: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.