换句话说,这是可行的:
$.grep($('div'), function(div) { return div.className == 'section' });
这不会:
$('div').grep(function(div) { return div.className == 'section' });
此外,正因为如此,搜索标记列表变得很棘手--第一行代码返回一个平面数组,而不是一个可以调用.css()等的链式JQuery对象。
grep在JQuery中以这种方式工作有什么好的理由吗?
发布于 2011-07-29 11:28:54
您要查找的函数是$.fn.filter()
的第二个(回调)变体。
它的工作方式与$.grep
大致相同,但作用于jQuery对象,并返回从回调函数返回true
的所有元素的jQuery对象,例如:
$('div')
.filter(function() {
return this.className == 'section'
})
.css( ... ) ;
发布于 2011-07-29 11:33:10
我相信jQuery.grep()
旨在成为array.Filter
的实现,类似于jQuery.inArray()
旨在提供array.indexOf
的实现。因此,它们不遵循其他jQuery方法约定。
正如其他人所指出的那样,filter()
的存在就是为了做你想做的事情。
发布于 2011-07-29 11:38:43
$.grep
方法是用于数组的utility methods之一。还有其他方法遵循相同的模式,如$.each
、$.map
、$.inArray
和$.merge
。
如果您想要在元素集合上工作的方法,您应该查看traversing methods,与$.grep
方法对应的是filter method。
此外,如果恰好有一个元素数组,则可以轻松地将它们放入jQuery对象中:
$($.grep($('div'), function(div) { return div.className == 'section' }))
https://stackoverflow.com/questions/6868319
复制相似问题