代码之家  ›  专栏  ›  技术社区  ›  Robby Cornelissen

javascript函数在第二次调用时未能获取对dom元素的引用[重复]

  •  0
  • Robby Cornelissen  · 技术社区  · 6 年前

    这个问题已经有了答案:

    下面是一个非常简单的函数,用于设置DOM元素的文本内容。

    const display = (el, value) => {
      el.textContent = value;
    };
    
    display(document.getElementById('element1'), 'One');
    display(document.getElementById('element2'), 'Two');
    <span id="element1" />
    <span id="element2" />

    奇怪的是,当第二次调用该函数时,该函数将出错:

    未捕获的类型错误:无法将属性“textcontent”设置为空

    起初,我认为问题可能是由于第二个元素在执行时可能尚未加载,但:

    • 脚本在 body 标记,因此应该已加载所有DOM元素。
    • 只在第二个元素上调用函数,正确打印 Two .
    • 将呼叫替换为 display() 具有 console.log(document.getElementById('element1')) console.log(document.getElementById('element2')) 成功地打印出这两个元素。
    • 更改两个呼叫的顺序仍将只显示 One ,但未发生错误。

    所以我被难住了。这个问题在stacksnippet和作为单独的HTML页面加载时都会出现。它同时出现在当前的火狐和Chrome中。

    我错过了一些很明显的东西吗?有人能告诉我发生了什么事吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Inus Saha    6 年前

    const display = (el, value) => {
      el.textContent = value;
    };
    
    display(document.getElementById('element1'), 'One');
    display(document.getElementById('element2'), 'Two');
    <span id="element1"></span>
    <span id="element2"></span>

    如果你改正了 span 然后标签就可以正常工作了。所以你关闭了 跨度 正确标记。