jQuery .is( selector ) - 所有选择器都匹配参数的地方?

jQuery .is( selector ) - where ALL selectors match the argument?

if ($('.A, .B, .C').is(':visible'))

-returns 如果这些元素中至少有一个匹配 给定参数,则为真。

如何更改它,使其 returns 仅当所有这些元素都匹配 给定参数时才为真? (对于此示例,参数可以更改为 :hidden 但这不是我要找的)

一个方便的方法是 Array.prototype.every:

if ($('.A, .B, .C').get().every(function(e) { return $(e).is(":visible"); })) {

...使用 ES2015(又名 "ES6")箭头函数语法看起来不那么笨重:

if ($('.A, .B, .C').get().every(e => $(e).is(":visible"))) {

every returns true 如果回调 returns 所有元素的真实值,false 如果回调 returns一个虚假的值,一旦它看到它将成为 false.

就会停止

另一个方便的方法是 filter:

var elements = $('.A, .B, .C');
if (elements.filter(":visible").length === elements.length) {
    // Yes, they're all visible
}

你可以给自己一个方便的 areAll 函数:

$.fn.areAll = function(arg) {
    return this.get().every(function(e) { // Or of course use
        return $(e).is(arg);              // the `filter` version
    });                                   // here if you prefer
};

...然后

if ($('.A, .B, .C').areAll(":visible")) {
    // ...
}