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