Javascript 如何检查具有特定类名的元素是否可见?

Javascript 如何检查具有特定类名的元素是否可见?,javascript,html,jquery,css,Javascript,Html,Jquery,Css,我想检查是否有ClassnamesettingsBox可见的元素。 我创建了此函数,但它不起作用: function noOptionsOpen(){ $(".settingsBox").each(function (){ if ($(this).is(":visible")) return false; }) return true; } 我猜,如果类名中有任何可见的内容,内部函数会返回fals,但跳出后,它仍然

我想检查是否有Classname
settingsBox
可见的元素。 我创建了此函数,但它不起作用:

function noOptionsOpen(){
    $(".settingsBox").each(function (){
        if ($(this).is(":visible")) return false;
    })
    return true;
}

我猜,如果类名中有任何可见的内容,内部函数会返回fals,但跳出后,它仍然会返回true,对吗?我只是不知道如何解决这个问题?

这个问题是因为您无法从
each()
中的匿名处理程序函数中的
nooptionopen()
函数返回。解决此问题的一种方法是在返回变量之前,在循环中定义并更新变量:

函数nooptions打开(){
让选项打开=真;
$(“.settingsBox”)。每个(函数(){
如果($(this).is(“:可见”))
选项打开=错误;
})
返回选项打开;
}
更好的方法是在单个选择器中使用
:visible
,并检查
length
属性。这几乎使功能变得多余,但这取决于您的用例:

函数nooptions打开(){
返回$(“.settingsBox:visible”)。长度==0;
}
//如上ES6所述:
让NoOptions打开=()=>$(“.settingsBox:visible”)。长度===0;
那是什么

const
isHidden=el=>(window.getComputedStyle(el.getPropertyValue('visibility')=='hidden'))
,noOptionsOpen=classN=>[…document.queryselectoral(`.${classN}')].some(ishiden)
;
console.log('some element not visible?->',nooptions open('settingsBox'))
#parent>div:n类型(3){
可见性:隐藏;
}

aa
bb
复写的副本
dd
ee