在 for 循环中填充动态创建的 html 元素
Populate dynamically created html elements inside of a for loop
我在 for 循环中创建了一个包含 html 个元素的块,其中列出了起始地址、目标地址、每个地址之间的距离和时间。我有一个名为 address
的地址数组,我正试图将其推送到 html 中的 startaddress
元素。在 for 循环内部,startaddress
的 id 使用模板文字 ${[i]}
动态递增,以便根据 address
数组的长度创建新元素。在 for 循环内,我创建了变量作为模板字符串,我认为这是正确的术语,但它们似乎没有被控制台识别为变量。如果我 console.log 他们,我会收到一条错误消息
startInput is not defined
destInput is not defined
显然我的做法是错误的,但我不确定如何动态填充 startaddress
。我最终希望在 for 循环内做的是创建 startInput1、startinput2 等,以及为 destInput1、destInput2 等创建相同的序列。我如何在 for 循环内创建这些动态变量。提前致谢,这是我的代码:
let container = document.querySelector(".container-lg")
for (let i = 0; i <= addresses.length; i++) {
let div = document.createElement("div");
div.classList.add("card", "card-body", "mb-3");
console.log(addresses[i]);
div.innerHTML = `<div class="mx-auto" style="width: 500px; margin-top:50px;">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Starting Address</span>
</div>
<input class="form-control" type="text" placeholder="Start Address" id="startaddress${i}">
</div>
<br />
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Destination Address</span>
</div>
<input class="form-control" type="text" placeholder="Destination Address" id="destAddress${i}">
</div>
<hr />
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Distance <span id="distance"></span></h5>
</div>
</div>
<br />
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Trip Time <span id="time1"></span></h5>
</div>
</div>`;
container.appendChild(div);
let startInput = document.querySelector(`#startaddress${[i]}`);
startInput.value = addresses[i];
}
let startInput${[i]} = document.querySelector("#startaddress${[i]}")
;为什么这部分使用模板文字?即使使用普通的 javascript 这个赋值也不起作用,(你不能动态地将数字添加到常量)但在你的情况下你也不需要这样做,因为这样做:
let startInput = document.querySelector(`#startaddress${i}`)
将在每个循环中为变量分配一个新值
同样在 html 模板上,以这种方式分配 id:
id=`startaddress${i}`
我能够弄清楚为什么我无法在 for 循环内部创建后动态更新每个元素。当然,在古斯塔沃的帮助下。我在 for 循环中添加了 div 变量、classList.add 和 container.appendChild 并解决了问题。由于在将变量添加到 DOM 之前尝试分配变量及其值,所以我的 startaddresses 为空。我在原来的 post.
中更新了我的代码
我在 for 循环中创建了一个包含 html 个元素的块,其中列出了起始地址、目标地址、每个地址之间的距离和时间。我有一个名为 address
的地址数组,我正试图将其推送到 html 中的 startaddress
元素。在 for 循环内部,startaddress
的 id 使用模板文字 ${[i]}
动态递增,以便根据 address
数组的长度创建新元素。在 for 循环内,我创建了变量作为模板字符串,我认为这是正确的术语,但它们似乎没有被控制台识别为变量。如果我 console.log 他们,我会收到一条错误消息
startInput is not defined
destInput is not defined
显然我的做法是错误的,但我不确定如何动态填充 startaddress
。我最终希望在 for 循环内做的是创建 startInput1、startinput2 等,以及为 destInput1、destInput2 等创建相同的序列。我如何在 for 循环内创建这些动态变量。提前致谢,这是我的代码:
let container = document.querySelector(".container-lg")
for (let i = 0; i <= addresses.length; i++) {
let div = document.createElement("div");
div.classList.add("card", "card-body", "mb-3");
console.log(addresses[i]);
div.innerHTML = `<div class="mx-auto" style="width: 500px; margin-top:50px;">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Starting Address</span>
</div>
<input class="form-control" type="text" placeholder="Start Address" id="startaddress${i}">
</div>
<br />
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Destination Address</span>
</div>
<input class="form-control" type="text" placeholder="Destination Address" id="destAddress${i}">
</div>
<hr />
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Distance <span id="distance"></span></h5>
</div>
</div>
<br />
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Trip Time <span id="time1"></span></h5>
</div>
</div>`;
container.appendChild(div);
let startInput = document.querySelector(`#startaddress${[i]}`);
startInput.value = addresses[i];
}
let startInput${[i]} = document.querySelector("#startaddress${[i]}")
;为什么这部分使用模板文字?即使使用普通的 javascript 这个赋值也不起作用,(你不能动态地将数字添加到常量)但在你的情况下你也不需要这样做,因为这样做:
let startInput = document.querySelector(`#startaddress${i}`)
将在每个循环中为变量分配一个新值 同样在 html 模板上,以这种方式分配 id:
id=`startaddress${i}`
我能够弄清楚为什么我无法在 for 循环内部创建后动态更新每个元素。当然,在古斯塔沃的帮助下。我在 for 循环中添加了 div 变量、classList.add 和 container.appendChild 并解决了问题。由于在将变量添加到 DOM 之前尝试分配变量及其值,所以我的 startaddresses 为空。我在原来的 post.
中更新了我的代码