如何检查元素是否隐藏在 jQuery 中?

IT技术 javascript jquery dom visibility
2021-01-27 03:43:34

是否有可能切换元素的可见性,使用功能.hide().show().toggle()

您将如何测试元素是否为visiblehidden

6个回答

由于问题涉及单个元素,因此此代码可能更合适:

// Checks CSS content for display:[none|block], ignores visibility:[true|false]
$(element).is(":visible");

// The same works with hidden
$(element).is(":hidden");

它与twernt 的建议相同,但适用于单个元素;与 jQuery FAQ 中推荐的算法相匹配

我们使用 jQuery 的is()来检查所选元素与另一个元素、选择器或任何 jQuery 对象。该方法沿着DOM元素遍历,找到一个满足传入参数的匹配项。如果匹配则返回真,否则返回假。

这是针对正则表达式的简单基准测试 is():jsperf.com/jquery-is-vs-regexp-for-css-visibility结论:如果您追求性能,请在 is() 上使用正则表达式(因为 is() 在查看实际元素之前首先查找所有隐藏节点)。
2021-03-14 03:43:34
这个解决方案似乎鼓励混淆visible=falsedisplay:none; 而 Mote 的解决方案清楚地说明了编码人员检查display:none; (通过提到隐藏和显示哪个控件display:none不是visible=true
2021-03-28 03:43:34
这是正确的,但:visible也会检查父元素是否可见,正如 chiborg 指出的那样。
2021-03-28 03:43:34
你有一点 - 我会明确表示代码只检查display属性。鉴于最初的问题是针对show()and 的hide(),并且他们设置了display,我的答案是正确的。顺便说一下,它确实适用于 IE7,这是一个测试片段 - jsfiddle.net/MWZss
2021-04-02 03:43:34
我实际上发现反向逻辑词更好: !$('selector').is(':hidden'); 由于某些原因。值得一试。
2021-04-04 03:43:34

您可以使用hidden选择器:

// Matches all elements that are hidden
$('element:hidden')

visible选择器:

// Matches all elements that are visible
$('element:visible')
@cwingrav 您可能想重新阅读文档, :hidden 适用于所有元素。表单元素type="hidden"只是一种可以触发 :hidden 的情况。没有高度和宽度的元素、有display: none、 和隐藏祖先的元素也符合 :hidden 的条件。
2021-03-10 03:43:34
当你处理几个元素并且很少发生时 - 即绝大多数情况下 - 时间问题是一个可笑的小问题。哦,不!花了 42 毫秒而不是 19 毫秒!!!
2021-03-13 03:43:34
在第 21 到 28 页上,它显示了 :hidden 或 :visible 与其他选择器相比有多慢。感谢您指出这一点。
2021-03-19 03:43:34
我正在使用此选择器手动切换元素。$('element:hidden') 对我来说总是正确的!
2021-03-25 03:43:34
请注意,本演示中有一些与性能相关的良好提示:addyosmani.com/jqprovenperformance
2021-04-09 03:43:34
if ( $(element).css('display') == 'none' || $(element).css("visibility") == "hidden"){
    // 'element' is hidden
}

上述方法没有考虑父级的可见性。要同时考虑父级,您应该使用.is(":hidden").is(":visible")

例如,

<div id="div1" style="display:none">
  <div id="div2" style="display:block">Div2</div>
</div>

上面的方法会考虑div2可见而:visible不是。但是以上内容在许多情况下可能很有用,尤其是当您需要查找隐藏父级中是否有任何可见的错误 div 时,因为在这种情况下:visible将不起作用。

这仅检查单个元素的显示属性。:visible 属性还检查父元素的可见性。
2021-03-13 03:43:34
@chiborg 是的,但有时这就是你想要的,我不得不艰难地学习 jQuery 是多么“聪明”......
2021-03-16 03:43:34
这是使用 IE 8 进行测试时唯一对我有用的解决方案。
2021-03-22 03:43:34
当元素存在但当前不在页面上时,例如在 detach() 之后,可以使用此答案。
2021-04-02 03:43:34
这确实回答了这个问题,因为问题是关于单个元素并通过使用hide(),show()toggle()函数,但是,正如大多数人已经说过的,我们应该使用:visible:hidden伪类。
2021-04-08 03:43:34

这些答案都没有解决我所理解的问题,即我一直在寻找的问题,“我如何处理具有 的物品visibility: hidden?” . :visible不会也:hidden不会处理这个,因为他们都在根据文档寻找显示。据我所知,没有选择器来处理 CSS 可见性。这是我解决它的方法(标准 jQuery 选择器,可能有更简洁的语法):

$(".item").each(function() {
    if ($(this).css("visibility") == "hidden") {
        // handle non visible state
    } else {
        // handle visible state
    }
});
您需要向上遍历 DOM 以检查节点的父节点,否则,这是无用的。
2021-03-27 03:43:34
visibility从字面上看这个答案很好,但问题是How you would test if an element has been hidden or shown using jQuery?. 使用 jQuery 意味着:display属性。
2021-04-01 03:43:34
带有visibility: hidden或 的元素opacity: 0被认为是可见的,因为它们仍然占用布局中的空间。请参阅Pedro Rainho 的回答关于选择器的jQuery 文档:visible
2021-04-01 03:43:34

如何确定切换元素的状态?


您可以使用:visible:hidden选择器确定元素是否折叠

var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');

如果您只是根据元素的可见性对其进行操作,则可以只在选择器表达式中包含:visible:hidden例如:

 $('#myDiv:visible').animate({left: '+=200px'}, 'slow');
想知道为什么没有答案提到元素从可见窗口移开的情况,比如top:-1000px......猜猜这是一个边缘情况
2021-03-12 03:43:34