Javascript 如何初始化firstChild以便我不';“得不到”;x、 firstChild是否为空或不是对象;?

Javascript 如何初始化firstChild以便我不';“得不到”;x、 firstChild是否为空或不是对象;?,javascript,Javascript,在我的JSP/HTML中,我有以下内容: <div id="exampleLabel"> </div> 这在Chrome中运行良好,在Firefox和IE中不起任何作用,页面上出现一个错误: exampleLabel.firstChild为null或不是对象 好吧,我可以认为没有firstChild,所以尝试使用firstChild。任何东西都会是NPE,我甚至可以认为其他浏览器不会像Chrome那样自行初始化 问题是,我如何自己初始化它,然后才能对其进行.nodeVa

在我的JSP/HTML中,我有以下内容:

<div id="exampleLabel"> </div>
这在Chrome中运行良好,在Firefox和IE中不起任何作用,页面上出现一个错误:

exampleLabel.firstChild为null或不是对象

好吧,我可以认为没有firstChild,所以尝试使用firstChild。任何东西都会是NPE,我甚至可以认为其他浏览器不会像Chrome那样自行初始化


问题是,我如何自己初始化它,然后才能对其进行
.nodeValue=“blahblah”

创建一个textNode,然后附加它

function changeLabel(){
    var textNode = exampleLabel.firstChild;
    if (!textNode) {
        textNode = document.createTextNode('foo');
        exampleLabel.appendChild(textNode);
    }
    textNode.nodeValue = 'LABEL HAS CHANGED';
}

它在IE中不起作用的原因是,与所有其他主流浏览器不同,它不会为HTML中的空白创建文本节点,因此只包含空格的
在IE中没有子节点。我建议手动添加文本节点,或更改现有的文本节点

此外,除非您在其他地方声明了
exampleLabel
,否则您依赖的是IE和Chrome的一个非标准且相当讨厌的特性,该特性将DOM元素的ID映射到全局对象的属性(即,您可以通过其ID将元素引用为变量)。这在其他浏览器中不起作用。您应该改为使用
document.getElementById()


尽管不太符合DOM,为什么不坚持使用
examplelab.innerHTML='LABEL HAS change'?啊,我明白了,我原以为Firefox的问题是一样的,但它并没有像IE那样出现错误。为指出这一点干杯。一分为二@TimDown我知道复制exampleLabel而不从全局范围中通过ID识别引用是一个容易犯的错误,但答案仍然不完整。这是一个灰色地带,它是否有效的否决票。是的,这很苛刻,但在这种情况下,您可以识别出用户是通过ID直接引用exampleLabel的。
function changeLabel(){
    var textNode = exampleLabel.firstChild;
    if (!textNode) {
        textNode = document.createTextNode('foo');
        exampleLabel.appendChild(textNode);
    }
    textNode.nodeValue = 'LABEL HAS CHANGED';
}
function changeLabel(labelText) {
    var exampleLabel = document.getElementById('exampleLabel');
    var child = exampleLabel.firstChild;
    if (!child) {
        child = document.createTextNode('');
        exampleLabel.appendChild(child);
    }
    child.nodeValue = labelText;
}

changeLabel('LABEL HAS CHANGED');