2012-03-07 75 views
0

...或者some()every()的专有名称是什么。基本上,我正在寻找一个功能或插件,让我写的东西,如:jquery布尔迭代器

okay = $("#myForm input").every(function() { 
    return $(this).val().length > 0 
}) 

hasErrors = $(listOfUsers).some(function() { 
    return this.errorCount > 0; 
}) 

你上心。

(在你尝试过的小队到达之前,我搜索了一下,发现jquery.arrayUtils,但那段代码对我来说并不令人信服)。

+1

这种功能通常被称为[聚合函数(http://en.wikipedia.org/wiki/Aggregate_function),因为它们返回从单一的价值列出一个值。集合函数还包括'count()','sum()'和'average()'等等。 – 2012-03-07 10:52:48

回答

3

一个简单的,简单的实现:

$.fn.some = function(callback) { 
    var result = false; 
    this.each(function(index, element) { 
     // if the callback returns `true` for one element 
     // the result is true and we can stop 
     if(callback.call(this, index, element)) { 
      result = true; 
      return false; 
     } 
    }); 
    return result; 
}; 

$.fn.every = function(callback) { 
    var result = true; 
    this.each(function(index, element) { 
     // if the callback returns `false` for one element 
     // the result is false and we can stop 
     if(!callback.call(this, index, element)) { 
      result = false; 
      return false; 
     } 
    }); 
    return result; 
}; 

随着ES5,阵列已经提供了方法everysome,所以你可以达到同样内置的方法:

okay = $("#myForm input").get().every(function(element) { 
    return $(element).val().length > 0 
}); 

但在没有HTML5 shim的旧版IE中无法使用。

+0

的确很简单!我希望每个回调都能得到相同的每个回调获得的参数(即索引,对象)。任何想法如何实现这一目标? – georg 2012-03-07 11:12:22

+0

是的。我更新了代码。将这些值提供给回调是非常有意义的(应该自己想到这一点))。 – 2012-03-07 11:17:27

+0

看起来不错,谢谢。 – georg 2012-03-07 11:38:16

0

你可以做这样的事情

okay = $("#myForm input").each(function() { 
    return $(this).val().length > 0 
}) 

okay = $("#myForm input").find('class').each(function() { 
    return $(this).val().length > 0 
}) 
+0

这不回答问题... – 2012-03-07 11:19:07