[英]Loop through two arrays - check if they belong to a div - append html to div
希望我能很好地解释这一点,这里是...
所以下面的 HTML 显示了我的 HTML 的基本版本 - 基本上我需要在悬停时将 H4 内部客户端内容附加到悬停项目(悬停项目当前显示但里面没有文本是空白的)。
所以我使用 document.QuerySelectorAll 生成一个 Node 列表,然后转换为一个数组,循环遍历客户端数组。
在里面,我使用两个 for 循环来遍历客户端内容数组和悬停项目数组,并检查它们是否包含在客户端 div 中...
如果是,那么我想将 h4 附加到悬停项。 每个 h4 都是唯一的,因为它们是人名,因此需要附加正确的名称。
const hoverItem = document.querySelectorAll(".hover-item") const hoverItemArray = Array.from(hoverItem); const clients = document.querySelectorAll(".client"); const clientsArray = Array.from(clients); const clientContent = document.querySelectorAll(".client-content"); const clientContentArray = Array.from(clientContent); clientsArray.forEach(item => { for (i = 0; i <= clientContentArray.length; i++) { for (e = 0; e <= hoverItemArray.length; e++) { if (item.contains(clientContentArray[i] && hoverItemArray[e])) { hoverItem[e].append(clientContentArray[i].innerHTML); } } } })
<div class="results"> <div class="client"> <img class="client-image"> <div class="client-content"> <h4>Client Name</h4> </div> <div class="hover-item"></div> </div> <div class="results"> <div class="client"> <img class="client-image"> </div> <div class="client-content"> <h4>Client Name</h4> </div> <div class="hover-item"></div> </div> <div class="results"> <div class="client"> <img class="client-image"> </div> <div class="client-content"> <h4>Client Name</h4> </div> <div class="hover-item"></div> </div>
第一:您不是在监听“悬停”事件(在 JS mouseover
),因此需要事件侦听器。
如果你想从同一个div
附加标题,就像.hover-item
你不需要数组。 您只需要选择前一个元素及其h4
然后将其删除并将其附加到标题。 此外,您可以直接循环遍历集合hoverItem
而无需将其转换为数组。
const hoverItem = document.querySelectorAll(".hover-item"); for (i = 0; i < hoverItem.length; i++) { hoverItem[i].addEventListener('mouseover', function() { const client_name = this.previousElementSibling.querySelector('h4'); if (client_name) { client_name.remove(); this.append(client_name); } }); }
<div class="results"> <div class="client"> <img class="client-image"> <div class="client-content"> <h4>Client Name 1</h4> </div> <div class="hover-item">Hover me!</div> </div> <div class="results"> <div class="client"> <img class="client-image"> </div> <div class="client-content"> <h4>Client Name 2</h4> </div> <div class="hover-item">Hover me!</div> </div> <div class="results"> <div class="client"> <img class="client-image"> </div> <div class="client-content"> <h4>Client Name 3</h4> </div> <div class="hover-item">Hover me!</div> </div>
如果我理解正确,当两个元素都在.client
元素中时,您基本上希望将h4
元素从.client-content
到.hover-item
。 因此,在您的示例 html 中,它仅适用于第一个.client
元素。
你可以用下面的代码做到这一点。 我在代码中添加了一些注释来解释并添加了一些带有颜色的 css 来可视化正在发生的事情。
//Loop over all client divs. document.querySelectorAll('.client').forEach((clientDiv) => { //check if the div contains both .client-content and .hover-item elements if(clientDiv.querySelector('.client-content') && clientDiv.querySelector('.hover-item')) { //append the div to to hover item. clientDiv.querySelector('.hover-item').append(clientDiv.querySelector('.client-content h4')); } });
div { display: inline-block; } .hover-item { background-color: blue; } .client-content { background-color: red; } h4 { margin: 10px; background-color: yellow; }
<div class="results"> <div class="client"> <img class="client-image"> <div class="client-content"> <h4>Client Name</h4> </div> <div class="hover-item"></div> </div> <div class="results"> <div class="client"> <img class="client-image"> </div> <div class="client-content"> <h4>Client Name</h4> </div> <div class="hover-item"></div> </div> <div class="results"> <div class="client"> <img class="client-image"> </div> <div class="client-content"> <h4>Client Name</h4> </div> <div class="hover-item"></div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.