使用 JavaScript 检查元素 CSS 显示

IT技术 javascript css
2021-01-22 07:53:12

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

6个回答

正如下面 sdleihssirhc 所说,如果元素display被继承或由 CSS 规则指定,则需要获取其计算样式

return window.getComputedStyle(element, null).display;

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

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

会给你一个字符串值。

什么是currentStyle从未听说过,也检查过但document.body.currentStyle一无所获(并不感到惊讶)
2021-03-15 07:53:12
为简单起见,为什么不总是获得计算样式?
2021-03-16 07:53:12
感谢您的评论。为现代网络更新了答案。
2021-03-18 07:53:12
@vsync(并供将来参考)根据 MDN,它是旧版 Internet Explorer 的专有属性。
2021-03-24 07:53:12
如果它没有内联css怎么办?
2021-03-27 07:53:12

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

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

否则,您将不得不获取计算样式,并且存在浏览器不一致的情况。IE 使用一个简单的currentStyle对象,但其他人都使用一个方法:

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

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

@Kai:使用===而不是==在这里没有问题,但同样也没有优势。两个操作数都保证是字符串,因此两个运算符执行完全相同的步骤。
2021-03-19 07:53:12
在这种情况下,这不应该是 == 吗?
2021-03-23 07:53:12
@Kai 三重相等不执行类型强制。Crockford在名为“===!==运算符”的部分解释了原因
2021-03-25 07:53:12
@hippietrail 近 10 年后(2019-10-27)仍然存在问题。检查MDN 报告的内容
2021-04-01 07:53:12
这很有趣。有趣的是,经过这么多年的编程,这样的事情怎么能逃过一劫。我总是采纳 === 是严格布尔值的建议。很高兴知道。
2021-04-12 07:53:12

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

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

你可以这样检查:

if($('#object').css('display') === 'block')
{
    //do something
}
else
{
    //something else
}
避免使答案过于复杂。我知道 jQuery 正在成为某种标准,但是没有理由仅仅为了检查元素的显示样式而添加整个框架。
2021-03-18 07:53:12
是的,但我这样做是因为其他人都给出了原始的 javascript 答案,所以如果他使用 jquery 但没有指定,那么帖子中会有一些用处
2021-04-08 07:53:12

这个答案并不完全是您想要的,但在某些情况下可能有用。如果你知道元素在显示时有一些尺寸,你也可以使用这个:

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

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

确实,这很有用。
2021-03-30 07:53:12

是的。

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