appenchild 在这个日历中是如何工作的?

问题描述

    for (var k = 1; k <= totalDay; k++) {
      var dayTd = document.createElement("td");
      var dayNum = document.createTextNode(k);
      dayTd.appendChild(dayNum);
      weekTr.appendChild(dayTd);
      if ((firstDay + k) % 7 == 0) {
        var weekTr = document.createElement("tr");
      }
      calendar.appendChild(weekTr);
    }

我是 JavaScript 新手,正在尝试制作日历。我尝试打印出一个月的天数,意外地发现以这种方式编写的代码有效!虽然它成功打印出结果,但我真的不明白这个循环中的 calendar.appendChild(weekTr) 是如何工作的。我想它应该在循环中的一个 tr 中保存七个 tds 然后将其保存到表中后放置在循环之外,但似乎不是那样。请参考下面的代码

https://jsfiddle.net/cnymd6x5/

解决方法

appendChild 从它所在的位置(如果它在任何地方)删除一个元素,然后将它放在您要附加它的对象的末尾。

所以:

  1. 将 TR 放在表的末尾(假设它已在循环之前创建并且不在 DOM 中的任何位置)。
  2. 从表的末尾移除 TR,然后将其放回原处
  3. 从表的末尾移除 TR,然后将其放回原处
  4. 从表的末尾移除 TR,然后将其放回原处
  5. 从表的末尾移除 TR,然后将其放回原处
  6. 从表的末尾移除 TR,然后将其放回原处
  7. 从表的末尾移除 TR,然后将其放回原处

... 然后循环结束。