使用JavaScript检查元素CSS显示


95

是否可以检查元素的CSS display == blocknone使用JavaScript?

Answers:


111

就像sdleihssirhc在下面说的那样,如果元素的display继承或由CSS规则指定,则需要获取其计算样式

return getComputedStyle(element, null).display;

元素具有一个style属性,可以告诉您想要什么,如果样式是内联声明的或使用JavaScript声明的:

console.log(document.getElementById('someIDThatExists').style.display);

将为您提供一个字符串值。


2
如果没有内联CSS怎么办?
jscripter 2014年

5
为简单起见,为什么不总是获得计算样式?
cade galt

12
是什么currentStyle?从来没有听说过,也检查document.body.currentStyle了却一无所获(并不感到惊讶)
vsync

1
@vsync(以供将来参考)根据MDN,它是Internet Explorer旧版本的专有属性。
user202729 '18

2
感谢您的评论。答案已针对现代网络进行了更新。
Dan Davies Brackett

78

如果样式声明为内联或使用JavaScript声明,则可以直接获取该style对象:

return element.style.display === 'block';

否则,您将必须获得计算出的样式,并且浏览器存在不一致之处。IE使用一个简单的currentStyle对象,但其他所有人都使用一种方法:

return element.currentStyle ? element.currentStyle.display :
                              getComputedStyle(element, null).display;

null被要求在Firefox 3及以下版本。


在这种情况下应该不是==吗?
Kai Qing

@Kai三重等于不强制输入。克罗克福德(Crockford)在名为“ ===!==运算符” 的部分中解释了为什么
sdleihssirhc 2011年

那很有趣。有趣的是,经过这么多年的编程,像这样的事情如何才能引起人们的注意。我总是采纳===是严格布尔值的建议。很高兴知道。
Kai Qing

3
@Kai:使用===而不是==在这里没有问题,但同样也没有优势。保证两个操作数都是字符串,因此两个运算符都执行完全相同的步骤。
蒂姆·唐

1
@hippietrail大约十年后(2019-10-27)仍然存在问题。查看MDN的报告
费利佩·阿拉米达

37

对于jQuery,您的意思是这样吗?

$('#object').css('display');

您可以像这样检查它:

if($('#object').css('display') === 'block')
{
    //do something
}
else
{
    //something else
}

9
避免使答案过于复杂。我知道jQuery已经成为一种标准,但是没有理由添加整个框架只是为了检查元素的显示样式。
zzzzBov 2011年

14
是的,但我这样做是因为其他所有人都给出了原始的javascript答案,因此,如果他使用的是jquery但未指定,则该帖子中会有所用处
Kai Qing

18

这个答案并非您想要的,但在某些情况下可能会有用。如果您知道该元素在显示时具有某些尺寸,则也可以使用以下方法:

var hasDisplayNone = (element.offsetHeight === 0 && element.offsetWidth === 0);

编辑:为什么这可能比直接检查CSS display属性更好?因为您不需要检查所有父元素。如果某个父元素具有display: none,则其子元素也被隐藏,但仍然具有element.style.display !== 'none'


确实,这很有用。
Jonatas Walker

7

是。

var displayValue = document.getElementById('yourid').style.display;

5

基本的JavaScript:

if (document.getElementById("elementId").style.display == 'block') { 
  alert('this Element is block'); 
}

2

要确定普通JavaScript是否可见,请检查display属性是否为“ none”(不检查“ block”,它也可以为空白或“ inline”,仍然可见):

var isVisible = (elt.style.display != "none");

如果您使用的是jQuery,则可以改用以下方法:

var isVisible = $elt.is(":visible");


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.