Javascript-无法读取未定义的属性“innerHTML”

Javascript-无法读取未定义的属性“innerHTML”,javascript,jquery,Javascript,Jquery,为什么我得到:未捕获的TypeError:无法读取未定义的属性“innerHTML”? 我想从一个任务中得到日期、月份和年份,这样我就可以计算出任务还剩多少天,但是我得到了这个错误 <div class="task" id="task"> <ul> <li class="title" id="@ta.Id"><div class="complete"></div>@

为什么我得到:未捕获的TypeError:无法读取未定义的属性“innerHTML”? 我想从一个任务中得到日期、月份和年份,这样我就可以计算出任务还剩多少天,但是我得到了这个错误

<div class="task" id="task">
                <ul>
                    <li class="title" id="@ta.Id"><div class="complete"></div>@ta.Title</li>
                    <li class="body"><b>Project: </b>@ta.Description</li>
                    <li>Hand In: @ta.Dia/@ta.Mes/@ta.Año</li>
                    <li class="leftion">Days left: </li>
                    <li class="day" style="display: none">@ta.Day</li>
                    <li class="month" style="display: none">@ta.Month</li>
                    <li class="year" style="display: none">@ta.Year</li>
                </ul>
            </div>
<script language="javascript" type="text/javascript">
var today = new Date();
     var dd = today.getDate();
     var mm = today.getMonth() + 1; //January is 0!

     var yyyy = today.getFullYear();
     if (dd < 10) {
         dd = '0' + dd
     }
     if (mm < 10) {
         mm = '0' + mm
     }
     var firstDate = new Date(yyyy, mm, dd);
     var gio = document.getElementsByClassName("task");
     var lele = document.getElementsByClassName("leftion");
     for (var i = 0; i <= gio.length; i++) {
         var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
         var day= document.getElementsByClassName("day")[i].innerHTML;
未捕获的TypeError:无法读取未定义的属性“innerHTML”

当使用var i=0的循环时;我您的html中的.task节点可能比.day节点多

如果只在当前任务节点中的节点中查找当天,您将有更多机会发现错误并避免许多奇怪的行为。任务节点:


请参见gio[i].getElementsByClassName的使用,而不是document.getElementsByClassName

该错误消息仅表示您试图访问未定义值的属性innerHTML。第一步是查看所有使用.innerHTML的地方,并确定哪些地方可能导致未定义。我指出了整个代码的问题所在。正是信息上方的这一行将代码i var month = document.getElementsByClassName("month")[i].innerHTML; var year= document.getElementsByClassName("year")[i].innerHTML; var secondDate = new Date(year, month, day); var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime()) / (oneDay))); lele[i].innerHTML = diffDays; } </script>
var gio = document.getElementsByClassName("task");
//...
for (var i = 0; i <= gio.length; i++) {
    //...
    var taskNode = gio[i];
    var day = taskNode.getElementsByClassName("day")[0].innerHTML;