显示为空的Javascript元素:无

显示为空的Javascript元素:无,javascript,dom-events,Javascript,Dom Events,我创建了一个页面,默认情况下,element1.style.display='none'。现在我有了另一个元素,element2,单击它时会显示element1。但是当尝试将element1设置为设置element1.style.display=“block”的函数时,会出现一个错误,提示element1为空。我理解这是因为默认情况下display=none 我如何解决这个问题?这是使用Javascript而不是jQuery var hash = location.hash; alert(ha

我创建了一个页面,默认情况下,
element1.style.display='none'
。现在我有了另一个元素,
element2
,单击它时会显示
element1
。但是当尝试将
element1
设置为设置
element1.style.display=“block”
的函数时,会出现一个错误,提示
element1
为空。我理解这是因为默认情况下
display=none

我如何解决这个问题?这是使用Javascript而不是jQuery

var hash = location.hash; 
alert(hash); 

function init() { 
    if( hash == '#menu-a' || hash == '' ) { 
        document.getElementById('menu-a').style.display = 'block';
    } 
    else if( hash == '#menu-b' ) { 
        document.getElementById('menu-b').style.display = 'block'; 
    }
    else { 
        document.getElementById('menu-c').style.display = 'block'; 
    } 
} 

window.onload=init; 

如果隐藏元素的顺序始终相同,则可以尝试使用getElementsByTagName(“”[arrayindex])访问它。

是否有可能在dom就绪之前触发javascript
element1
在您想要访问dom树时是否存在于dom树中

我理解这是因为默认情况下display=none

没有。这是因为没有为变量赋值

我猜您正期待一个带有
id=“element1”
的元素自动创建一个名为
element1
的JavaScript变量-它不应该这样做

document.getElementById('element1').style.display = 'block';

您应该在
元素
初始化后立即执行
display:block
,然后在初始化后立即将其还原为
display:none

我实际上遇到了一个类似的问题:并非所有浏览器都以相同的方式处理元素
display:none
(或至少其子元素)。我将一些SVG对象放在两个div中,我想显示其中一个。在初始化期间,我对SVG元素进行了一些操作(更改SVG中的一些文本元素)。这在Firefox上运行得很好,但在Opera、Chrome和IE上却失败了。 在这些浏览器中,当试图使用
document.getElementById(myID)
获取div中的元素时,display:none的div中的元素给出了空结果。第一个解决方法是仅在初始化之后设置
display:none
属性(这是有效的),但是当我想再次显示它们时,所有初始化都丢失了(文本标签都是默认的)。 我认为这证明了带有
display:none
的DIV的内容以某种方式从DOM中清除,而不是简单地隐藏。 我还尝试使用
visibility:hidden
而不是
display:none
,但这将页面布局弄得一团糟。到目前为止,似乎对所有浏览器都有效的唯一解决方案是将我想要隐藏的DIV放置在“外层空间”中,如


我假设您正在更改该元素的样式,甚至在html页面中生成该元素之前。当您尝试访问网页中的某个元素时,如果该元素在该时间点在网页中不可用,则返回
Null

我的建议是在这些元素完全加载后运行javascript部分,使用诸如,
onclick
onload
等属性

引用一个元素应该足够好了。很可能是范围问题,并且从他想要访问它的位置看不到
element1
。但是如果没有代码,就真的没有什么可以说的了(更好的解决方案是给元素一个ID并使用
getElementById
).tl;dr版本:正确环境中的getElementById是最佳解决方案。你是对的。完整注释:由于没有提供任何代码,我假设所有元素都正确地进行了ide,并且getElementById仍然无法工作。当然,getElementById是最好的解决方案,我只是想提供一些快速的解决方案,尝试以较小的压力解决这个问题;警报(散列);函数init()window.onload=init;我们需要诊断——或者更确切地说是确认——我们的直觉,我们还需要html代码。或者你可以自己检查element1的标记中是否设置了id=“element1”。html代码中有错误,这是使用id名称时的一个输入错误。这是一个愚蠢的错误,我花了很多时间来修复它。从中吸取的教训
position: absolute;
top: -9999px;
left: -9999px;