2017-03-04 4 views
1

if ($('.A, .B, .C').is(':visible'))jQuery .is(セレクタ) - すべてのセレクタが引数と一致する場所?

- これらの元素の少なくとも一方が与えられた引数に一致する場合はtrueを返します。

これらの要素のすべてが指定された引数のと一致する場合にのみtrueを返すように変更するにはどうすればよいですか? は(引数は次のように変更することができます。この例のために隠されたが、それは私が探していますものではありません)

答えて

2

一つの便利な方法が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戻っtrueコールバックがfalsy Vを返す場合、コールバックは、すべての要素についてtruthy値、falseを返す場合それが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")) { 
    // ... 
} 
+0

私が最初に考えました'.filter' alだったので、質問のコンテキスト+ –

+0

明確で、速い答えを与えられた!フィルタオプションは私にとってはより良い解決策のように見えますが、比較するデータがたくさんある場合、最初の選択肢がどのように速くなるかを見ることができます。ありがとうTJ – Sach

+0

@Sach:ええ、最初の1つは一時的なjQueryオブジェクト(その '$(e)')を作成することです。だからスイングとロータリー。 :-)喜んで助けた。 –

関連する問題