[英]style.display=“block” for event.target element and style.display=“none” for other elements
[英]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
或功能是否相同
您可以使用: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.