1
if ($('.A, .B, .C').is(':visible'))
jQuery .is(selector) - 所有選擇器都與參數匹配?
- 返回true,如果這些元素中的至少一個匹配給定的參數。
我該如何改變它,以便它返回true只有當所有這些元素匹配給定的參數? (該參數可改爲:隱藏在這個例子中,但是這不是我所期待的)
if ($('.A, .B, .C').is(':visible'))
jQuery .is(selector) - 所有選擇器都與參數匹配?
- 返回true,如果這些元素中的至少一個匹配給定的參數。
我該如何改變它,以便它返回true只有當所有這些元素匹配給定的參數? (該參數可改爲:隱藏在這個例子中,但是這不是我所期待的)
一個方便的方法是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")) {
// ...
}
我首先想到的是'.filter' al所以給出了問題的上下文+ –
清晰,快速的答案!過濾器選項看起來對我來說是更好的解決方案,但是我可以看到如果有大量數據要比較,第一個選項可能會更快。謝謝TJ – Sach
@Sach:是的,很難說,第一個涉及到創建一堆臨時jQuery對象('$(e)')。如此波動和環島。 :-)很高興幫助。 –