簡體   English   中英

查找集合中是否有任何元素具有style.display!==“ none”;

[英]Finding if there any element in the set has style.display !== “none”;

var isAnyBool = $(selector)
 .filter(function(){ return this.style.display !== "none"; })
 .length;

// if (isAnyBool) { .. }

這可以按預期工作,但是當所有需要的只是簡單的true / false時就不必要地計算所有元素。 如何提高效率呢?

更新:由於visible不知道元素是否被直接隱藏,或者某些父項實際上被隱藏,我必須檢查style.display或功能是否相同

我不了解性能效率,但這很容易理解:

var isAnyBool = $(selector).is(':visible');

編輯#2:

我認為@dandavis的答案是最好的答案

您可以使用:visible使其簡單

var isAnyBool = $(selector).filter(':visible').length;
var isAnyBool =  $(selector+"[style*='display: none']").length > 0 ;

在現代瀏覽器中應該比任何類型的迭代都要快得多。

由於jQuery的:visible可能不僅受style.display的影響,所以它不是此工作的正確工具。

這僅檢查樣式屬性,並且無需進行js迭代即可這樣做,從而使其成為撰寫本文時提供的最快,最簡單的解決方案。

您可以對同一回調使用.is()方法 ,而不是過濾和計數元素:

var isAnyBool = $(selector).is(function(){ return this.style.display !== "none"; })

它不算.. length是屬性而不是函數。 因此,當您調用.length時,沒有太多的事情發生

我會存儲結果而不是存儲長度,以防萬一它可以在其他地方使用。

var mySelector = $(selector).filter(function(){ return this.style.display !== "none"; })

if (mySelector.length) { .. }

無法確定這是多少開銷,但如果您執行以下操作,對我來說似乎更容易理解:

$(selectSomeStuff).filter(!$(this).is(':visible'));

...或可測試的變量

var isAnyBool = $(selectSomeStuff).filter(!$(this).is(':visible')).length

...也許就像聲明

if ($(selectSomeStuff).filter(!$(this).is(':visible'))){
  var isAnyBool = true;
  // OR
  //.. do stuff here ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM