开发者问题收集

错误提示“无法将属性‘innerHTML’设置为 null”

2019-01-29
2738

我正在从 Javascript 生成 html 表并将其作为 InnerHTML 分配给 div 标签,但是出现了错误:

"Uncaught TypeError: Cannot set property 'innerHTML' of null"

<html>
<body>
<div class="fieldlist-vertical-title" style="color:white;left:0px;display:none;" id="rosterlegend">Some text</div>
<script>
   function generateLegend()
       {
       var fullTable ='' fullTable='<Table><TR><Table><TR bgcolor=#FF5733><TD>MM</TD>
       <TD>01:00 to 21:30</TD></TR></Table></TR></Table>'
       document.getElementById('rosterlegend').innerHTML = fullTable
       }
   generateLegend();
</script>
</body>
</html>

Error : Uncaught TypeError: Cannot set property 'innerHTML' of null

3个回答

尝试更改为类似这样的内容,这样我们就可以确保 HTML DOM 已先完成加载。
使用 ES6 模板字符串代替纯字符串!

document.addEventListener('DOMContentLoaded', () => {
  generateLegend();
});

function generateLegend() {
  fullTable = `<Table>
                 <TR>
                   <Table>
                     <TR bgcolor=#FF5733>
                       <TD>MM</TD>
                       <TD>01:00 to 21:30</TD>
                     </TR>
                     <TR bgcolor=#FFFFFF>
                       <TD>EVVV</TD>
                       <TD>09:00 to 05:30</TD>
                     </TR>
                  </Table>
                 </TR>
               </Table>`;

  document.getElementById('rosterlegend').innerHTML = fullTable;
}
<div id="rosterlegend">
  <div>
Bibberty
2019-01-29

删除 HTML 字符串中的新行和多余空格。

其余代码运行正常! 然而,这不是一个好习惯。 理想情况下,您必须等待窗口加载。

window.onload(){
  generateLegend();
}
function generateLegend() {
   var fullTable = " <Table><TR><Table><TR bgcolor=#FF5733><TD>MM</TD><TD>01:00 to 21:30</TD></TR><TR bgcolor=#FFFFFF><TD>EVVV</TD><TD>09:00 to 05:30</TD></TR></Table></TR></Table>";

   document.getElementById('rosterlegend').innerHTML = fullTable;
}
generateLegend();
<div id="rosterlegend">Some text</div>
Monica Acha
2019-01-29

您的问题是,在 DOM 加载之前,您尝试使用 id 为“rosterlegend”的 div 来访问它。这意味着当您的 javascript 尝试访问您的元素时,它无法访问。解决此问题的一种方法是将 loadDOMContentLoaded 事件侦听器添加到您的元素,一旦您的 HTML(如果您使用 load 事件,则包括图像)和窗口加载,该函数就会触发。这样您的 javascript 就会知道您的 HTML。

请参阅下面的工作示例:

function generateLegend() {
   var fullTable = " <Table><TR><Table><TR bgcolor=#FF5733><TD>MM</TD><TD>01:00 to 21:30</TD></TR><TR bgcolor=#FFFFFF><TD>EVVV</TD><TD>09:00 to 05:30</TD></TR></Table></TR></Table>";

   document.getElementById('rosterlegend').innerHTML = fullTable;
}

window.addEventListener("load", generateLegend); // call your function when the window has loaded
<div id="rosterlegend"></div>
Nick Parsons
2019-01-29