myDiv.style.display在主样式表中设置时返回空白
myDiv.style.display returns blank when set in master stylesheet
简短版本:是标准的行为,myDiv.style.display
(Javascript)返回空白时,我已经设置了div
display:none
在主样式表,但返回"none"时,它是通过内联样式设置?
长版:
我有一些div
s,我通过他们的display
样式隐藏和取消隐藏,在block
和none
之间用Javascript切换它。它们总是从隐藏(display:none
)开始,我已经用内联样式设置了:
<div id="anID" class="aClass" style="display:none">
stuff
</div>
这是在none
和block
之间切换的Javascript。两个chOpsXXX()函数只是将divSection.style.display
设置为相反的值(以及其他内务管理):
var divSection = document.getElementById("chOpsSection" + strSectionID);
var strDisplay = divSection.style.display;
if (strDisplay == "none") {
chOpsDisplaySection(strSectionID);
} else {
chOpsHideSection(strSectionID);
}
当我使用内联样式属性来设置初始display:none
样式时,这一切都工作得很好。
我还在主样式表中为这些div设置了其他样式。因此,我决定将display:none
的初始状态移到上述样式表中。我照做了。我就不贴出来了,我想你可以想象一下。
但是当我这样做的时候,div
最初是隐藏的(display:none
),但是第一次调用divSection.style.display
返回一个空字符串(alert(strDisplay);
返回一个空字符串,而不是null)。
上面显示的Javascript然后隐藏它(因为它不等于"none"),然后下一个调用divSection.style.display
返回"none",从那里一切工作正常。(如果我在主样式表中将其设置为inline
,则行为相同:div
最初是可见的,并且对divSection.style.display
的第一次调用返回一个空白字符串)。
这很容易通过检查"none"answers"在我的Javascript上面修复。但是我想知道从divSection.style.display
返回一个空白字符串是否是标准行为。
欢迎回复
如果您通过JS访问一个DOM元素(例如使用getElementById
),您将无法读取该元素的计算样式,因为它是在CSS文件中定义的。为了避免这种情况,你必须使用属性getComputedStyle
(或IE的currentStyle
)。
function getStyle(id, name)
{
var element = document.getElementById(id);
return element.currentStyle ? element.currentStyle[name] : window.getComputedStyle ? window.getComputedStyle(element, null).getPropertyValue(name) : null;
}
使用(JSFiddle): var display = getStyle('myDiv', 'display');
alert(display); //will print 'none' or 'block' or 'inline' etc
它不起作用,因为您将其作为元素的style
属性删除,并将其放置在外部样式表中。DOM不会显示文档对象中不存在的属性值(DOM只是一个逐字读取HTML文档的XML解析器)。
要查找在外部样式表中设置的CSS值,必须解析document.styleSheets
并找到匹配的选择器。
这就是使用像jQuery
这样的库变得非常方便的地方,因为它解析外部样式表,并具有帮助方法来将完整的CSS应用于元素。
示例:
value = $("#anID").css("display");
PS -寻找空字符串也不会为您工作,因为display: "与display: "none"不一样(事实上,对于div,与display: block相同,因为空白本质上意味着inherit
)
我的解决方案:
创建.hidden
类
.hidden {
display: none !important;
}
Javascript: function toggleHidden(id) {
var x = document.getElementById(id);
x.classList.toggle('hidden');
}
javascript的display属性表示仅用于DOM属性
Mozilla JS wiki, 返回一个对象,表示元素的样式属性。
W3schools, Style对象表示一个个人风格声明
你可以使用jquery的css方法来获得像
这样的混合显示值alert($("#foo").css("display"))
它应该显示none即使你设置了css
- 节点,express应用程序返回text/javascript响应头(Content-Type),尽管设置了applic
- Firebase-返回用户uid并将用户元数据值设置为不同的节点
- 当我将参数设置为对象时,JavaScript返回TypeError
- Ajax请求返回模块设置数据
- 为什么将新日期设置为今天会返回昨天
- 如果循环中至少有一个元素返回 false,如何将变量设置为 false
- html5复选框返回“;关于“;值,而不是我设置的值
- 工厂返回数据后未设置角度$scope
- 根据其他属性返回的值设置属性
- 设置快速路由,找不到API调用返回404
- 将DIV ID内的所有链接设置为返回false
- _.find 是否返回对对象的引用?如何正确设置结果的属性
- 在设置超时后返回变量
- 如何在滚动到底部后在页脚上方设置“返回顶部”
- 如何设置返回值时,javascript从后面的代码调用
- 为什么使用jQuery.手动设置返回值的长度
- jQuery验证:$.data($('form')[0],'验证器').设置返回未定义
- Javascript -在函数中设置返回值为true
- 不能在ajax调用中设置返回值
- Angular:在我在控制器中设置返回值之前,我怎么能等待服务中的承诺被解析呢?