javascript - EJS循环时的Javascript DOM操作
问题描述
我有几个小时来解决这个问题,但我仍然坚持,似乎无法找到解决方案。简而言之,我试图从 EJS 循环中操作每个 div。我简化了问题,以便更容易理解。
<% for(let i of products) { %>
<div>
// products irrelevant code
</div>
<div class="d-flex justify-content-around">
<i class="btn btn-light fas fa-heart fa-lg" id="wishlist" style="color:grey;"></i>
</div>
<% } %>
<script>
const heart = document.getElementById("wishlist")
heart.addEventListener("click", ()=> {
heart.style.color = "red";
});
</script>
在我的显示页面上,当我单击元素时,它会更改应有的颜色,但仅适用于第一个产品。我不确定为什么没有击中循环中的每个 div。如何更改每个特定元素的颜色?
解决方案
删除 idwishlist
并为父 divi
添加container
id。
AddEventListener on container
id div,并修改目标点击元素,如下代码所示。
const heart = document.getElementById("container");
heart.addEventListener("click", (e) => {
const tgt = e.target;
if (tgt.classList.contains('fa-heart')) {
tgt.style.color = "red";
}
});
.red {
color: red
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" />
<div id="container">
<div>
// products irrelevant code
</div>
<div class="d-flex justify-content-around" id="container">
<i class="btn btn-light fas fa-heart fa-lg" style="color:grey;"></i>
</div>
<div>
// products irrelevant code
</div>
<div class="d-flex justify-content-around">
<i class="btn btn-light fas fa-heart fa-lg" style="color:grey;"></i>
</div>
<div>
// products irrelevant code
</div>
<div class="d-flex justify-content-around">
<i class="btn btn-light fas fa-heart fa-lg" style="color:grey;"></i>
</div>
</div>
推荐阅读
- swift - 为什么不透明度为 0.0 的 SwiftUI Rectangle 在透明的 NSWindow 上呈现灰色矩形?
- python - Pyinstaller .exe 文件未打开其中包含 Face_recognition 模块。(在.py中工作)
- javascript - CSVto json 客户端
- python - Jupyter:[Errno 13] 权限被拒绝:'Export.csv',无法使用 pandas 保存 .csv 文件
- ruby-on-rails - RoR:设计枚举角色,基于角色登录后重定向?
- python - 将 numba 函数拆分为项目中的单独模块以进行打包
- python - Django:如何使用 drf 序列化程序接受带有空格的键?
- c++ - 为什么当 HBITMAP 被销毁时,来自 OleCreatePictureIndirect 的 IImage 变得无效?
- javascript - 世博会图标未更新
- c++ - 为 CMake 定义自定义平台的正确方法是什么?