2017-03-04 47 views
1

if ($('.A, .B, .C').is(':visible'))jQuery .is(selector) - 所有選擇器都與參數匹配?

- 返回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如果回調所有元素的返回truthy值,如果false回調返回falsy v一旦它看到將會是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:是的,很難說,第一個涉及到創建一堆臨時jQuery對象('$(e)')。如此波動和環島。 :-)很高興幫助。 –