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")) {
// ...
}
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")) {
// ...
}