打开新 div 时关闭其他 div(在 forloop.counter 中)

Close other div when new div is opened (in forloop.counter)

当我打开一个新的 div 时,我试图关闭另一个 div,但是我在循环中使用,所以我使用了 forloop.counter 但它不起作用。当我尝试在没有 forloop.counter 的情况下或在循环外使用时,它工作正常,但我想在 for 循环内使用。

page.html


{% for result in results %}

    <button class="open-div-button" onclick="openDiv-{{forloop.counter}});">Open Div</button>

    <div class="div-content" id="content-{{forloop.counter}}">Content Goes Here</div>

{% endfor %}



<script>

    function openDiv(id) {
        let model = document.getElementById(`openDiv-${id}`);
        model.classList.toggle("active");
    }

</script>

<style>

    .content {
        padding: 10px 20px;
        display: none;
        background-color: #f1f1f1;
    }

    .content.active {
        padding: 10px 20px;
        display: block;
        background-color: #f1f1f1;
    }

</style>

我也试过使用 forEach 像 :-

function openDiv(id) {
    let model = document.getElementById(`openDiv-${id}`);
  document.querySelectorAll(`openDiv-${id}`).forEach(function(div) {
    if (div.id == id) {
      model.classList.toggle("active");
    } else {
      model.classList.toggle("active");
    }
  });
}

但它不工作,也没有显示任何错误。

我想做什么?

当新 div 在 for 循环中打开时,我正在尝试 close 激活 div。

我已经尝试了很多次了,但是没有用。我看到了很多问题,但不幸的是我没有找到 forloop.counter 的任何问题。任何帮助将非常感激。提前致谢。

你可以这样做(如果 forloop.counter 没有问题的话):

{% for result in results %}

<button class="open-div-button" onclick="openDiv({{forloop.counter}});">Open Div</button>

<div class="div-content" id="content-{{forloop.counter}}">Content Goes Here</div>

{% endfor %}
<style>
.div-content{
    padding: 10px 20px;
    display: none;
    background-color: #f1f1f1;
}

.div-content.active {
    padding: 10px 20px;
    display: block;
    background-color: #f1f1f1;
}
</style>
<script>
  function openDiv(id) {
    let model = document.getElementById(`content-${id}`);
    let currentActive = document.querySelector('.div-content.active');
    if(currentActive){
      currentActive.classList.remove('active');
    }

    if(currentActive != model){
      model.classList.add("active");
    }
  }
</script>