有了这个小提琴http://jsfiddle.net/mungbeans/f2ne6/2/
为什么在css中定义时在js中访问时不透明度未定义?
我认为答案是因为样式也未定义,为什么会这样,样式是否需要在定义不透明度之前显式添加?
编辑缺少 [] 是我从源代码复制到小提琴时创建的错字。样式/不透明度问题仍然存在于原始代码中,这在这方面是正确的。
有了这个小提琴http://jsfiddle.net/mungbeans/f2ne6/2/
为什么在css中定义时在js中访问时不透明度未定义?
我认为答案是因为样式也未定义,为什么会这样,样式是否需要在定义不透明度之前显式添加?
编辑缺少 [] 是我从源代码复制到小提琴时创建的错字。样式/不透明度问题仍然存在于原始代码中,这在这方面是正确的。
title.style.opacity
应该:
title[0].style.opacity
因为 getElementsByTagName 返回一个节点列表。
编辑:
这仍然没有得到价值。您需要执行以下操作:
window.getComputedStyle(title[0]).opacity
演示:http: //jsfiddle.net/f2ne6/12/
有两个原因:
getElementsByTagName()
返回元素列表,而不是单个元素getElementById()
。因此,您需要对结果进行下标NodeList
以获得所需的 DOM 元素;style
元素的属性访问样式时,您只会获得内联样式,而不是您通过CSS 类指定的样式。要获取计算的样式,您可以使用window.getComputedStyle()
,它将为您提供元素所有CSS 属性的最终使用值:
alert(window.getComputedStyle(title).opacity);
演示。
这是因为 HTML 元素(在 DOM 中)的 style 属性不包含计算的样式,它包含元素的立即定义的样式。考虑以下 HTML:
<div id="one" style="width: 50px;"></div>
如果你打电话document.getElementById("one").style.width
,你会"50px"
回来的。但是,如果您删除该style
属性并改用 CSS 将 div 设置为宽度为 50 像素,它将返回""
. 你可以在这里看到这个:
您可能正在寻找计算样式,可以在大多数浏览器中使用getComputedStyle()
. 在 IE9 之前它在 IE 中不起作用,尽管在 IE<9 中可能有办法做到这一点。无论在何处定义,计算的样式都将返回不透明度。请参阅此处的更新示例getComputedStyle()
:
Chase 是正确的,但是您的代码中还有另一个问题。该style
属性仅包含使用style
元素属性设置的样式,因此 Chase 的解决方案只能解决您的问题的一半。您要做的是使用该getComputedStyle()
函数来获取元素的运行时样式:
function test(id) {
var listElement = document.getElementById(id);
var titles = listElement.getElementsByTagName("div");
var style = getComputedStyle(titles[0]);
alert( "Opacity: " + style.opacity );
}
在这里查看我更新的 jsfiddle:http: //jsfiddle.net/7vQ4A/1/