You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript创建多个带<a>标签的可点击迭代div

解决方法:生成带标签包裹的多个

首先,你的JS代码逻辑本身是正确的,理论上会生成30个标签(每个包裹对应

)。之所以看起来只生成了1个,是因为CSS布局限制导致其他元素被挤压或超出可视范围,或是你检查DOM时没找到全部元素。

问题分析

  1. .wrapper类设置了固定宽度4000px,但每个.one类的宽度是400vw(相当于4倍视口宽度),30个元素总宽度远超过4000px,flex布局下会被强制压缩,视觉上重叠或只显示第一个。
  2. 用var声明变量存在变量提升风险,换成let更规范。
  3. 每次创建元素后通过getElementById查找,不如直接操作刚创建的DOM元素高效。

修正后的代码

JS代码(优化版)

const adoptionSqs = 30;
const container = document.getElementById("rewild-the-valley");

for (let i = 0; i < adoptionSqs; i++) {
  // 创建a标签
  const adoptionA = document.createElement("a");
  adoptionA.href = `#rewild-${i}`; // 模板字符串更简洁,锚点需加#

  // 创建div标签
  const divElement = document.createElement("div");
  divElement.id = `rewild-${i}`;
  divElement.classList.add("one", "slide"); // 一次性添加多个类

  // 组装并添加到容器
  adoptionA.appendChild(divElement);
  container.appendChild(adoptionA);
}

CSS代码(调整布局)

去掉.wrapper的固定宽度,让容器自适应元素总宽度:

.wrapper {
  display: flex;
  flex-direction: row;
  /* 移除固定width: 4000px */
  transform: rotate(90deg) translateY(-100vh);
  transform-origin: top left;
  background: url("https://tirnatur.digitalpercolator.co.uk/wp-content/uploads/2023/03/Clouds-scaled.jpg");
}

若需每个.slide保持100vw宽度,调整.one的宽度:

.one {
  border: 1px solid red;
  background-color: black;
  opacity: 0.6;
  background-size: auto 80vh;
  background-repeat: repeat-x;
  width: 100vw; /* 从400vw改为100vw,与.slide保持一致 */
}

HTML代码(补全闭合标签)

确保标签正确闭合,避免布局异常:

<div class="outer-wrapper">
  <div class="wrapper" id="rewild-the-valley">
  </div>
</div>

验证方法

打开浏览器开发者工具(F12),查看#rewild-the-valley的子节点,即可看到30个标签已正确生成。

内容的提问来源于stack exchange,提问作者Gale Lewis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:35:20