classList的JavaScript问题

达里奥

我有一个小问题,以了解为什么我的功能无法正常工作。

我有一个这样的常见问题页面:

<div class="faq_box_after">
    <div class="question_box">
        <p class="question_box_question"><i class="fas fa-plus"></i></p>
        <p class="question_box_answer"></p>
    </div>
    <div class="question_box">
        <p class="question_box_question"><i class="fas fa-plus"></i></p>
        <p class="question_box_answer"></p>
    </div>
    <div class="question_box">
        <p class="question_box_question"><i class="fas fa-plus"></i></p>
        <p class="question_box_answer"></p>
    </div>
    <div class="question_box">
        <p class="question_box_question"><i class="fas fa-plus"></i></p>
        <p class="question_box_answer"></p>
    </div>
    <div class="question_box">
        <p class="question_box_question"><i class="fas fa-plus"></i></p>
        <p class="question_box_answer"></p>
    </div>
    <div class="question_box">
        <p class="question_box_question"><i class="fas fa-plus"></i></p>
        <p class="question_box_answer"></p>
    </div>
    <div class="question_box">
        <p class="question_box_question"><i class="fas fa-plus"></i></p>
        <p class="question_box_answer"></p>
    </div>
</div>    

单击.fa-plus时,我需要显示答案;再次单击加号时,我需要隐藏答案;单击另一个加号时,我需要隐藏答案。我在JavaScript中使用此功能:

document.addEventListener("DOMContentLoaded", function(event) {

  let plus = document.querySelectorAll('.question_box_question .fas');

  for (let i = 0; i < plus.length; i++) {

    plus[i].addEventListener('click', function(e) {
      let answer = e.target.parentNode.nextElementSibling;
      let totAnswer = document.querySelectorAll('.question_box_answer');
      for (let j = 0; j < totAnswer.length; j++) {
        if (totAnswer[j].classList.contains('active')) {
          totAnswer[j].classList.remove('active');
        }

      }
      answer.classList.toggle('active');

    }, false)

  }
});

因此,如果我删除for循环,即删除所有活动类,则切换工作,但是如果我使用for循环,则切换工作仅显示而不是隐藏。

我尝试了替代方法:

if (answer.classList.contains('active')) {
  answer.classList.remove('active')
} else {
  answer.classList.add('active');
}

但是什么都没有。

伦霍尔姆

关闭打开的答案无效,因为当您循环浏览所有答案时,这包括您要关闭的答案。因此,active该类将从循环中的答案中删除,然后在您运行时再次添加answer.classList.toggle('active')

解决方案是简单地不要active在循环中删除该答案上类,您可以通过在if语句中包括一个条件来完成该循环,如下所示:

      ...
      for (let j = 0; j < totAnswer.length; j++) {
        if (totAnswer[j] !== answer && totAnswer[j].classList.contains('active')) {
          totAnswer[j].classList.remove('active');
        }

      }
      ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Javascript中的classList.toggle

element.classList.contains()在JavaScript中到底如何工作?

JavaScript classList.add无法正常工作

JavaScript classList.remove无法正常工作

类,颜色之间的平滑过渡| .classList.toggle,JavaScript

JavaScript-1. .splice()很奇怪2. .classList.add很奇怪

javascript中的javascript输入问题

jQuery addClass工作正常,但javascript classList.add工作异常

在Javascript中删除活动类“ classList.remove”

如何使用JavaScript修复“切换”“ classList”

使用.classList和.toggle的Javascript函数在IE8中不起作用

JavaScript / jQuery“未捕获的TypeError” classList

Javascript-未捕获的TypeError:无法读取null的属性“ classList”

使用 classList 从 JavaScript 在 Web 组件中动态添加类

通过 JavaScript classList 为 div 添加样式

什么是原生 JavaScript classList 的 jQuery 等价物?

在 JavaScript 中克隆后 classList.toggle() 不起作用

JavaScript 将 classList.toggle 仅应用于 onclick 元素

Javascript - classList 事件侦听器的问题

ClassList.toggle funktioniert nicht innerhalb einer ul (HTML/CSS/JavaScript)

ClassList.toggle 在 ul (HTML/CSS/JavaScript) 中不起作用

JavaScript:为什么 classList.remove 不起作用?

Javascript XMLHTTPRequest .classList 响应

Javascript:element.classList.add("none") 工作不正常

i need to increment a number in a classList template string javascript

我需要在 classList 模板字符串 javascript 中增加一个数字

在 Javascript 中使用“classList.toogle”执行更改元素类的动画

Javascript SetMonth 问题

Javascript - classList.toggle ("my-class") 不起作用,因为主类正在获取多个