JQuery булевы итераторы - PullRequest
       3

JQuery булевы итераторы

0 голосов
/ 07 марта 2012

... или как правильно назвать some() и every().По сути, я ищу функцию или плагин, который позволил бы мне написать что-то вроде:

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

или

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

У вас есть идея.

(До того, как прибыла команда «что попробовал», я погуглил и обнаружил jquery.arrayUtils , но этот код мне не кажется убедительным).

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

Простая, простая реализация:

$.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 массивы уже предоставляют методы every и some, поэтомувы можете добиться того же с помощью встроенных методов:

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

, но в более старой версии IE это не будет работать без HTML5 shim .

0 голосов
/ 07 марта 2012

Вы можете сделать что-то вроде этого

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

okay = $("#myForm input").find('class').each(function() { 
     return $(this).val().length > 0
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...