jquery中的“任何”布尔函数

有没有简单的方法来检查jquery选择器中的任何元素是否满足条件? 例如,要检查表单中的任何文本框是否为空(伪种类,而不是真正的jquery):

$('input.tb').any(val().length == 0); 

注意:我知道可以使用辅助方法完成,只是好奇,如果它可以在一个语句中。

jQuery内置了很多伪选择器: http : //api.jquery.com/category/selectors/jquery-selector-extensions/

您还可以使用filter()函数构建自己的函数: http : //api.jquery.com/filter/

 $('input.tb').filter(function() { return this.value.length == 0}); 

带有函数参数的.is()就是你所追求的。

 var anyEmpty = $('input.tb').is(function(index, element) { return !element.value; }) 

警告:

该function令人惊讶,因为它不会短路。 它将不必要地迭代所有选定的元素,即使回调已经满足。

 let i = 0 let result = $('div').is((index, element) => { i++; return element.tagName === 'DIV'; }) console.log(`count = ${i}, result = ${result}`); // count = 732, result = true 
 if ( $('input.tb[value=""]').length > 0 ) // there are empty elements 

对于偶然发现这种情况的其他人,我迟到了一年:

Malk的答案将满足您的示例中的精确要求:

 $('input.tb').filter(function() { return this.value.length == 0}).length != 0; 

执行此操作的稍微更高效的方法(如果早期满足条件,filter函数仍将迭代剩余的DOM元素)将编写您自己的帮助器方法(诚然,操作已声明

我知道可以使用辅助方法完成它,只是好奇,如果它可以在一个语句中

,但我来到这个页面希望节省2分钟写我自己的):

 ;(function($) { //iterates over all DOM elements within jQuery object //and returns true if any value returned from the supplied function is 'truthy'. //if no truthy values are returned, returns false. // //Function( Integer index, Element element ) $.fn.any = function(fn) { var i=0; for (;i 

当前答案以及jQuery自己的.has().filter()在于,只要符合条件,它们就不会短路。

这是一个简单的4行扩展方法,它接受任何过滤函数,并在符合该条件时返回true。

 jQuery.fn.any = function(filter){ for (i=0 ; i 

然后像这样使用它:

 var someInputsEmpty = $(":input").any(function() { return this.value == ''; }); 
 jQuery.fn.any = function(filter){ for (i=0 ; i