提问者:小点点

为什么切换在JS中只发生一次


正如标题所说,我需要在一些按钮上切换一个类,而我真的不明白如何做不止一次。问题出在第二个代码块(带有Document.QuerySelector的代码块)上,而不是另一个。

另一个在那里是因为它是用来导航的,它必须在那里。

如果点击“Executiee”,文本将会改变。在它下面,会有一个箭头来更改文本。它工作,但如果你想回头(在另一个箭头上出现),它不再工作了。

有人能帮我理解为什么会这样吗?谢了。

null

document.querySelector(".fa-arrow-custom").addEventListener("click", function() {
  const primaPagina = document.querySelector(".executie-problema");
  const aDouaPagina = document.querySelector(".executie2-problema")
  primaPagina.classList.toggle("hide", !primaPagina.classList.contains("hide"));
  aDouaPagina.classList.toggle("hide", !aDouaPagina.classList.contains("hide"));
});
.hide {
    display: none;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Divide et Impera</title>
    <script src="https://kit.fontawesome.com/6612084f00.js" crossorigin="anonymous"></script>
</head>
<body>
    <div class="container">
      <div class="executie-problema problema">
          <div class="row d-flex justify-content-center align-items-center vh-100">
            <div class="col-xs-12 col-custom">
              Pasi (Divide):
<ol class="pasi-executie">
  <li>In main este apelata functia, cu n=5.</li>
  <li>Pt n=5, factorial returneaza 5*factorial(4). Astfel, este pus in stiva 5*factorial(4).</li>
  <li>Se calculeaza factorial(4), ce returneaza 4*factorial(3), urmatorul element din stiva devenind 4*factorial(3).</li>
  <li>Se calculeaza factorial(3), ce returneaza 3*factorial(2), care este pus si in stiva.</li>
  <li>Factorial(2) este 2*factorial(1) – se pune in continuare in stiva.</li>
  <li>Factorial(1) este 1*factorial(0) – ultimul element pus in stiva.</li>
  <li>Divizarea se opreste, deoarece factorial(0) este 1.</li>
  <li>Datorita faptului ca in stiva ultimul element se pune intotdeauna deasupra, aceasta arata astfel:</li>
</ol>
<i class="fas fa-arrow-right fa-arrow-custom"></i>
            </div>
          </div>                   
    </div>
    <div class="executie2-problema problema hide">
      <div class="row d-flex justify-content-center align-items-center vh-100">
        <div class="col-xs-12 col-custom">
          Urmatorul pas (Impera):
<ol class="pasi-executie">
<li>Factorial(0) este 1, deci 1*factorial(0) este 1.</li>
<li>2*factorial(1) este 2*1=2.</li>
<li>3*factorial(2) este 3*2=6</li>
<li>4*factorial(3) este 4*6=24</li>
<li>5*factorial(4) este 5*24=120 <- care este problema initiala, deci raspunsul este 120.</li>
</ol>
<i class="fas fa-arrow-left fa-arrow-custom"></i>
        </div>
      </div>                   
  </div>
</div>
</body>
<script src="./js/meniu-introducere.js"></script>
</html>

null


共1个答案

匿名用户

如果存在两个或更多元素,则必须使用

然后使用为每个元素添加一个事件

null

document.getElementById("listUL").addEventListener("click", function(e) {
    const tgt = e.target;
    const id = tgt.dataset.id;
    [...document.querySelectorAll("div.problema")]
    .forEach(div => div.classList.toggle("hide", !div.classList.contains(id)))
  })

const primaPagina = document.querySelector(".executie-problema");
const aDouaPagina = document.querySelector(".executie2-problema");

document.querySelectorAll(".fa-arrow-custom").forEach(elem => {
  elem.addEventListener("click", function() {
    primaPagina.classList.toggle("hide", !primaPagina.classList.contains("hide"));
    aDouaPagina.classList.toggle("hide", !aDouaPagina.classList.contains("hide"));
  })
})
.hide {
    display: none;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Divide et Impera</title>
    <link href="css/normalize.css" rel="stylesheet" />
    <link href="css/fonts.min.css" rel="stylesheet" />
    <link href="css/main.css" rel="stylesheet" />
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <script src="https://kit.fontawesome.com/6612084f00.js" crossorigin="anonymous"></script>
</head>
<body>
    <div class="container">
          <div class="container-meniu">
            <ul class="list-group" id="listUL">
                <li class="list-group-flush list-item-custom generalitati" data-id="generalitati-problema">Generalitati</li>
                <li class="list-group-flush list-item-custom avantaje" data-id="avantaje-problema">Avantaje</li>
                <li class="list-group-flush list-item-custom avantaje" data-id="dezavantaje-problema">Dezavantaje</li>
                <li class="list-group-flush list-item-custom identificare" data-id="identificare-problema">Identificare DEI</li>
                <li class="list-group-flush list-item-custom criterii" data-id="criterii-problema">Criterii de rezolvare DEI</li>
                <li class="list-group-flush list-item-custom de-ce-dei" data-id="de-ce-dei-problema">De ce DEI?</li>
                <li class="list-group-flush list-item-custom cod" data-id="cod-problema">Cod</li>
                <li class="list-group-flush list-item-custom complexitate" data-id="complexitate-problema">Complexitate</li>
                <li class="list-group-flush list-item-custom executie" data-id="executie-problema">Executie</li>
              </ul>
      </div>
      <div class="generalitati-problema problema">
                test
      </div>
      <div class="executie-problema problema hide">
          <div class="row d-flex justify-content-center align-items-center vh-100">
            <div class="col-xs-12 col-custom">
              Pasi (Divide):
<ol class="pasi-executie">
  <li>In main este apelata functia, cu n=5.</li>
  <li>Pt n=5, factorial returneaza 5*factorial(4). Astfel, este pus in stiva 5*factorial(4).</li>
  <li>Se calculeaza factorial(4), ce returneaza 4*factorial(3), urmatorul element din stiva devenind 4*factorial(3).</li>
  <li>Se calculeaza factorial(3), ce returneaza 3*factorial(2), care este pus si in stiva.</li>
  <li>Factorial(2) este 2*factorial(1) – se pune in continuare in stiva.</li>
  <li>Factorial(1) este 1*factorial(0) – ultimul element pus in stiva.</li>
  <li>Divizarea se opreste, deoarece factorial(0) este 1.</li>
  <li>Datorita faptului ca in stiva ultimul element se pune intotdeauna deasupra, aceasta arata astfel:</li>
</ol>
<img src="./img/stivaDAC.jpg" alt="" srcset="" class="img-custom-introducere">
<i class="fas fa-arrow-right fa-arrow-custom"></i>
            </div>
          </div>                   
    </div>
    <div class="executie2-problema problema hide">
      <div class="row d-flex justify-content-center align-items-center vh-100">
        <div class="col-xs-12 col-custom">
          Urmatorul pas (Impera):
<ol class="pasi-executie">
<li>Factorial(0) este 1, deci 1*factorial(0) este 1.</li>
<li>2*factorial(1) este 2*1=2.</li>
<li>3*factorial(2) este 3*2=6</li>
<li>4*factorial(3) este 4*6=24</li>
<li>5*factorial(4) este 5*24=120 <- care este problema initiala, deci raspunsul este 120.</li>
</ol>
<i class="fas fa-arrow-left fa-arrow-custom"></i>
        </div>
      </div>                   
  </div>
</div>
</body>
<script src="./js/meniu-introducere.js"></script>
</html>