为什么';t JQuery$.grep()是否使用选择器?
奇怪的是,grep不能与可选的选择器参数一起工作——您调用grep的现有方式似乎不符合JQuery约定。换句话说,这是有效的:为什么';t JQuery$.grep()是否使用选择器?,jquery,Jquery,奇怪的是,grep不能与可选的选择器参数一起工作——您调用grep的现有方式似乎不符合JQuery约定。换句话说,这是有效的: $.grep($('div'), function(div) { return div.className == 'section' }); 这并不是: $('div').grep(function(div) { return div.className == 'section' }); 此外,由于这一点,搜索标记列表变得很困难——第一行代码在工作时返回一个平面数组
$.grep($('div'), function(div) { return div.className == 'section' });
这并不是:
$('div').grep(function(div) { return div.className == 'section' });
此外,由于这一点,搜索标记列表变得很困难——第一行代码在工作时返回一个平面数组,而不是一个可以调用.css()等的可链接JQuery对象
grep在JQuery中以这种方式工作是否有充分的理由?您正在寻找的函数是的第二个(回调)变体 它的工作方式与
$.grep
大致相同,但作用于jQuery对象,并返回从回调函数返回true
的所有元素的jQuery对象,例如:
$('div')
.filter(function() {
return this.className == 'section'
})
.css( ... ) ;
我相信
jQuery.grep()
是array.Filter
的实现,类似于jQuery.inArray()
是array.indexOf
的实现。因此,它们不遵循其他jQuery方法约定
正如其他人所指出的,
filter()
是为您正在尝试的操作而存在的。$.grep
方法是用于数组的方法之一。还有其他方法遵循相同的模式,如$。每个,$.map
,$.inArray
和$.merge
如果您想要在元素集合上工作的方法,您应该查看对应于$的方法。grep
方法将是
此外,如果碰巧有一个元素数组,则可以轻松地将它们放入jQuery对象中:
$($.grep($('div'), function(div) { return div.className == 'section' }))
它们做同样的事情似乎很奇怪,一个用于标记集合,另一个用于数组。两者使用相同的名称并无害处,而且我认为,根据过滤的是普通数组还是标记的选择,必须使用不同的名称实际上是令人困惑的。