通过JS获取style.display属性只能在设置内联时使用?

DA.*_*DA. 4 javascript css

我正试图在页面上抓取div的DISPLAY属性.如果它是通过内联样式属性设置的,我似乎只能抓住它.

如果我的JS是这样的:

alert(document.getElementById('myDiv').style.display);
Run Code Online (Sandbox Code Playgroud)

它将使用此HTML警告"阻止":

<div id="myDiv" style="display: block;"></div>
Run Code Online (Sandbox Code Playgroud)

但是,如果我通过外部样式表设置它:

#myID {display: block}
Run Code Online (Sandbox Code Playgroud)

和我的HTML:

<div id="myDiv"></div>
Run Code Online (Sandbox Code Playgroud)

然后我的警报是一个空字符串.

为什么是这样?

jha*_*rtz 11

这是CSS的"功能".要实际获取样式,您需要使用window.getComputedStyle(大多数浏览器)或element.currentStyle(Internet Explorer).

可以在以下网址找到实现window.getComputedStyle IE的修复程序:http://snipplr.com/view/13523/getcomputedstyle-for-ie/.此外,请参阅此页面以获取更多信息:http://www.quirksmode.org/dom/getstyles.html#link7(底部附近有一个脚本,用于跨浏览器的getComputedStyle替代方案).

这应该适用于所有浏览器(基于上面QuirksMode链接的功能):

var elem = document.getElementById("myDiv");
if (elem.currentStyle) {
    var displayStyle = elem.currentStyle.display;
} else if (window.getComputedStyle) {
    var displayStyle = window.getComputedStyle(elem, null).getPropertyValue("display");
}
alert(displayStyle);
Run Code Online (Sandbox Code Playgroud)