var isAnyBool = $(selector)
.filter(function(){ return this.style.display !== "none"; })
.length;
// if (isAnyBool) { .. }
这可以按预期工作,但当需要的所有元素都是简单的真/假时,不必要地计算所有元素。如何才能提高效率?
更新:,因为visible
不知道元素是否被直接隐藏,或者某些父母实际上是隐藏的,我必须检查style.display
或者相同的内容功能
答案 0 :(得分:6)
答案 1 :(得分:2)
您可以使用:visible
var isAnyBool = $(selector).filter(':visible').length;
答案 2 :(得分:2)
var isAnyBool = $(selector+"[style*='display: none']").length > 0 ;
在现代浏览器中,应该比任何类型的迭代都快。
因为jQuery的:visible不仅仅受到style.display的影响,它还不适合这项工作。
仅检查样式属性,并且在没有js迭代的情况下进行检查,使其成为撰写本文时提供的最快,最简单的解决方案。
答案 3 :(得分:2)
您可以使用.is()
method使用相同的回调,而不是过滤和计算元素:
var isAnyBool = $(selector).is(function(){ return this.style.display !== "none"; })
答案 4 :(得分:1)
它不计算.. length
是属性而不是函数。因此,当您致电.length
如果可以在其他地方使用,我会存储结果,而不是存储长度。
var mySelector = $(selector).filter(function(){ return this.style.display !== "none"; })
if (mySelector.length) { .. }
答案 5 :(得分:1)
不能确定这是否是或多或少的开销,但如果你这样做的话,对我来说似乎更清晰:
$(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 ...
}