节点列表中 for 的意外行为

Unexpected behaviour with for in a nodelist

我有一个包含 30 divs 的节点列表,我需要每 4 divs 包括 1 div,但是 var 'c' 不会改变并堆叠所有divs 在 position[6].

for (i = 0; i < 8; i++) {
  var pub = "pub-retangulo-";
  var c = 2;
  c += 4;

  var o = document.createElement("div");
  o.setAttribute("id", pub.concat(i.toString()));
  o.setAttribute("align", "center");

  var container = document.querySelectorAll(".short-summary")[c];

  container.parentNode.insertBefore(o, container);
}

您要在每次迭代时重新声明 c 变量。这就是它停留在 6 的原因。您需要将此分配移到循环之外

var pub = "pub-retangulo-";
var c = 2;
for (i = 0; i < 8; i++) {

  var o = document.createElement("div");
  o.setAttribute("id", pub.concat(i.toString()));
  o.setAttribute("align", "center");

  var container = document.querySelectorAll(".short-summary")[c];

  container.parentNode.insertBefore(o, container);
  c += 4;
}

我还把你的 c+=4 移到了循环的末尾,这将导致循环第一次在 c = 2 执行,而不是 c = 6

正如所说,在这种情况下您可能根本不需要变量。您每次递增 4,因此您可以将 c 变量替换为 2 (initial value) + i(current iteration index) * 4 (increment ratio)

P.S. 此代码 未经测试,请不要只是复制粘贴它并期望一切正常.尝试理解它并将其应用到您自己的上下文中。