2011-07-29 28 views
3

看起来很奇怪,grep不能使用可选的选择器参数 - 你调用grep的现有方式似乎超出了JQuery约定。换句话说,这个工程:

$.grep($('div'), function(div) { return div.className == 'section' }); 

这不:

$('div').grep(function(div) { return div.className == 'section' }); 

此外,由于这一点,变得棘手的搜索标签列表 - 的第一行代码,而它的工作原理,返回一个平面数组,而不是一个很好的可链式JQuery对象,你可以调用.css()等。

grep在JQuery中以这种方式工作是否有很好的理由?

回答

3

您正在寻找的功能是$.fn.filter()的第二个(回调)变体。

它的工作方式几乎为$.grep相同,但充当一个jQuery对象,并返回所有元素的jQuery对象,从回调函数返回true,如:

$('div') 
.filter(function() { 
    return this.className == 'section' 
}) 
.css(...) ; 
+0

这似乎很奇怪,他们做同样的事情,只是一个用于收集的标签和其他阵列。使用同一个名字并没有什么坏处,我认为根据你是在过滤一个普通的数组还是选择一个标签,必须使用不同的名称会让人感到困惑。 –

0

我相信​​旨在是array.Filter的实现,类似于jQuery.inArray()意在提供array.indexOf的实现。因此,他们不遵循其他jQuery方法约定。

正如其他人指出的,filter()存在为你正在尝试做什么。

0

$.grep方法是旨在与数组一起使用的utility methods之一。还有其他方法遵循相同的模式,如$.each,$.map,$.inArray$.merge

如果你想上的元素集合工作,你应该看看traversing methods方法,对应于$.grep方法将是filter method


另外,如果你碰巧有元素的数组,可以轻松地将它们放在一个jQuery对象:

$($.grep($('div'), function(div) { return div.className == 'section' })) 
相关问题