在js中访问元素时不透明度和样式未定义,但在css中定义
opacity and style undefined when accesing element in js but defined in css
用这个小提琴http://jsfiddle.net/mungbeans/f2ne6/2/
为什么在js中访问时不透明度是未定义的,而在css中定义了不透明度?
我想答案是因为样式也是未定义的,为什么在定义不透明度之前,样式需要明确添加某个地方吗?
编辑缺少[]是我从源代码复制到fiddle时造成的拼写错误。样式/不透明度问题仍然存在于原始代码中,这在这方面是正确的。
title.style.opacity
应该是:
title[0].style.opacity
因为getElementsByTagName返回nodeList。
编辑:
这仍然没有得到价值。您需要执行以下操作:
window.getComputedStyle(title[0]).opacity
https://developer.mozilla.org/en-US/docs/DOM/window.getComputedStyle?redirectlocale=en-美国&redirectslug=DOM%3window.getComputedStyle
演示:http://jsfiddle.net/f2ne6/12/
有两个原因:
getElementsByTagName()
返回元素列表,而不是像getElementById()
那样返回单个元素。因此,您需要为生成的NodeList
加下标,以获得所需的DOM元素- 最重要的是,当您通过元素的
style
属性访问样式时,您将只获得inline样式,而不是通过CSS类分配的样式
要获得计算的样式,您可以使用window.getComputedStyle()
,这将为您提供所有的最终使用值元素的CSS属性:
alert(window.getComputedStyle(title).opacity);
演示。
不幸的是,getComputedStyle
在IE<9,但你可以很容易地找到一个polyfill,比如这个。
这是因为HTML元素(在DOM中)的样式属性不包含计算样式,而是包含元素的直接定义样式。考虑以下HTML:
<div id="one" style="width: 50px;"></div>
如果你拨打document.getElementById("one").style.width
,你会得到"50px"
。但是,如果删除style
属性,而是使用CSS将div样式设置为宽度为50像素,则它将返回""
。你可以在这里看到这一点:
http://jsfiddle.net/aAbJY/
您可能正在寻找计算样式,它可以在大多数使用getComputedStyle()
的浏览器中获得。它直到IE9才在IE中工作,尽管可能有一种方法可以在IE<9.无论在哪里定义,计算样式都将返回不透明度。请在此处查看getComputedStyle()
的更新示例:
http://jsfiddle.net/aAbJY/1/
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/
- Node.js错误“;ReferenceError:全局未定义“;在从0.10.2更新到0.12.2之后
- 用HTML5FileReader填充的Javascript多维数组未定义(但仅在首次使用时!)
- 如何处理错误'控制台未定义'在powershell中
- ReferenceError:regeneratorRuntime未定义(但在作用域内工作)
- getElementsByTagName'未定义'在Firefox和Chrome中
- 如何抓住'ga未定义'在您的开发环境中
- 未定义显示在选项中
- "键未定义”;在AngularJS'的自定义筛选功能
- 'io未定义'在客户端上.在HTML中包含socket.io脚本标记
- $stateParams变为'未定义'在传递到控制器之后
- 'require未定义'在Meteor.js中,当包含NPM包时
- 事件未定义错误在 javascript 中只有 Firefox
- Javascript 对象属性未定义(但属性已设置)
- Mongo 返回未定义但数据存在
- JQuery UI AutoComplete:.data(..) 未定义 [但仅当我添加第二个自动完成框时]
- 变量在 iPad 上可以未定义与在我的浏览器中定义的原因
- ReferenceError:未定义$traceurRuntime(在angularjs应用程序中)
- 为什么'this'返回& # 39;未定义# 39;在箭头函数中被引用,但在匿名函数中被调用时没有被引用
- 函数未定义-但在控制台中工作
- Jquery脚本不能正常运行时,通过硒(SCRIPT5009: '$'(未定义).但在Web浏览器控制台