How to retrieve the display property of a DOM element?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <html>
<style type="text/css">
a {
display: none;
}
</style>
<body>
<p id="p"> a paragraph </p>
google
</body>
<script type="text/javascript">
var a = (document.getElementById('a')).style;
alert(a.display);
var p = (document.getElementById('p')).style;
alert(p.display);
p.display = 'none';
alert(p.display);
</html> |
第一个和第二个alert除了空字符串(我认为应该是none和block)外什么都没有显示。
但是,在进行故意的display设置之后,第三个alert最终会警告none。
但是为什么呢?如何正确检索display属性?
谢谢。
.style.*属性直接映射到style属性,而不是应用的样式。为此,您需要getComputedStyle。
我会认真考虑切换.className并将演示文稿与逻辑完全分开。
- 样式不应称为属性。它是一个对象。每个DOM元素节点都有一个style属性。此属性是一个对象。 ... HTML样式属性用于将属性添加到表示HTML元素的DOM节点的样式属性中。解析HTML代码后,我们将不再具有HTML属性,而是具有对象属性。
-
@?ime Vidas:我认为,如果您重新阅读David的答案,您会意识到他正确地区分了这一区分。
-
@David Dorward:谢谢您的帮助。那么style属性的用法是什么,因为它不能反映CSS样式的实时更改?
-
@jcyang:DOM中元素上的style对象用于更改应用于该特定元素的样式,就像标记中的style属性一样。如果要修改样式表中的样式定义,则可以在其他地方进行:developer.mozilla.org/En/DOM/Stylesheet
-
样式属性在HTML解析之前就存在。页面解析后,就不再有样式属性。可以对样式对象进行操作,然后不再将其"映射"到HTML源代码的原始样式属性。
-
@?ime Vidas:"一旦解析了HTML代码,我们就不再具有HTML属性,而是对象属性。"实际上,这些属性成为DOM属性-具体来说就是属性节点。正确的术语是style对象上的这些属性反映了" style "属性(就像className反映了" class "属性一样)。
-
这些属性节点是属性,而不是属性。在浏览器的对象模型中,仅存在属性。这些属性可以是对象或原始值。每个DOM节点(无论类型如何)都是一个属性。 HTML样式属性用于设置DOM元素的初始样式对象。 (顺便说一句,在JavaScript术语中,属性是完全不同的东西-它们是绑定到每个属性的元信息。这些属性定义属性是否为只读)
-
@David Dorward:那么style属性/对象仅用于更改,而计算的样式/ currentStyle仅用于查看?
-
当然,对style属性所做的更改也是可见的。
-
@Sime Vidas:谢谢。确实可以看到更改。我已经测试过了
您需要元素的显示属性的计算值。您可以按以下方式获得它。请注意,大多数浏览器都支持window.getComputedStyle(),而IE中最接近的等效项是元素的currentStyle属性:
1 2 3 4 5 6 7 8 9 10 11 12
| var el = document.getElementById('a');
var styleObj;
if (typeof window.getComputedStyle !="undefined") {
styleObj = window.getComputedStyle(el, null);
} else if (el.currentStyle !="undefined") {
styleObj = el.currentStyle;
}
if (styleObj) {
alert(styleObj.display);
} |
我建议使用JavaScript库获取计算样式。例如,使用jQuery,您可以使用css()方法检索计算的样式...
css()方法是跨浏览器的解决方案,因为它在内部使用样式对象以及getComputedStyle方法和currentStyle对象。
如果可以使用jQuery,则有一种方法称为.is
要检查是否未显示某些内容,我会做... $('someSelector').is(':visible') ...
如果将display属性设置为None,则将返回false。