javascript - 循环函数 document.getElementById()

标签 javascript html loops onclick getelementbyid

所以我使用三个唯一的 ID“titleselected0”、“titleselected1”、“titleselected2”。每个都有一个 onclick 函数,运行函数“myFunction0”、“myFunction1”、“myFunction2”。我用它来改变样式。我的问题是我是否可以使用循环,这样我只需要使用一个函数而不是三个?

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
        <style type="text/css">.collapse {
           display: none;
           }
           .collapse.in {
           display: block;
           }
           .title {
           background-color: #005FAA;
           border: none;
           border-radius: 0;
           padding: 30px;
           }
           .title:hover {
           background-color: #009cde;
           border: none;
           border-radius: 0;
           padding: 30px;
           }
           .container{
           margin-top:25px;
           float:left; 
           width: 32%; 
           margin-right: 2%;
           }
           .container:last-child{
           margin-right:0px;
           width:32%;}
           @media only screen and (max-width: 800px) {
           .container{
           margin-top:15px;
           width: 100%;
           }
           .container:last-child{
           margin-top:15px;
           width: 100%;
           }
           }
           .titleselected{
           background-color: #009cde;
           border:none; 
           border-radius:0; 
           padding: 30px;
           }
        </style>
        <div>
           <div class="container">
              <div class="title" data-toggle="collapse" href="#collapse" id="titleselected0" onclick="myFunction0()">
                 <h4><a href="#collapse" style="color:white; text-decoration:none; text-align:center;">System Information</a></h4>
              </div>
              <div class="collapse" id="collapse" style="background-color:#005FAA;transition: width 200ms ease-out, height 200ms ease-out;">
                 <div style="color:white; padding: 30px;border:none;">
                    <p><strong>TestingTestingTestingTestingTestingTestingTesting</strong></p>
                    <ul>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                    </ul>
                    <p><strong>TestingTestingTestingTestingTestingTestingTesting: </strong></p>
                    <ul>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                    </ul>
                 </div>
              </div>
           </div>
           <div class="container">
              <div class="title" data-toggle="collapse" href="#collapse2" id="titleselected1" onclick="myFunction1()">
                 <h4><a href="#collapse2" style="color:white;text-decoration:none;text-align:center;">Product Specification</a></h4>
              </div>
              <div class="collapse" id="collapse2" style="background-color:#005FAA;transition: width 200ms ease-out, height 200ms ease-out;">
                 <div style="color:white; padding: 30px;border:none;">
                    <p><strong>TestingTestingTestingTestingTestingTestingTesting:</strong></p>
                    <ul>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                    </ul>
                 </div>
              </div>
           </div>
           <div class="container">
              <div class="title" data-toggle="collapse" href="#collapse3" id="titleselected2" onclick="myFunction2()">
                 <h4><a href="#collapse3" style="color:white;text-decoration:none;text-align:center;">Case Study</a></h4>
              </div>
              <div class="collapse" id="collapse3" style="background-color:#005FAA;transition: width 200ms ease-out, height 200ms ease-out;">
                 <div style="color:white; padding: 30px;border:none;">
                    <p><strong>TestingTestingTestingTestingTestingTestingTesting: </strong></p>
                    <ul>
                       <li>TestingTestingTestingTestingTestingTestingTesting</li>
                       <li>TestingTestingTestingTestingTestingTestingTesting <a href="http://portfolio.cpl.co.uk/CIBSE/201904/40/">appeared in the CIBSE Journal</a></li>
                    </ul>
                 </div>
              </div>
           </div>
        </div>
        <script>
           function myFunction0() {
              var element = document.getElementById("titleselected0");
              element.classList.toggle("titleselected");
           }
           
           function myFunction1() {
              var element = document.getElementById("titleselected1");
              element.classList.toggle("titleselected");
           }
           
           function myFunction2() {
              var element = document.getElementById("titleselected2");
              element.classList.toggle("titleselected");
           }
           
           
        </script>

最佳答案

这些元素已经具有 titleclass,因此您可以循环遍历所有 .title 元素并附加监听器:

document.querySelectorAll('.title').forEach((element) => {
  element.addEventListener('click', () => {
    element.classList.toggle("titleselected");
  });
});

(随意删除所有 id 和内联属性 onclick 处理程序 - 最好使用 Javascript 附加监听器,而不是 HTML)

您还可以在包含所有 .title 的容器上使用事件委托(delegate):

<div class="container-for-all">
   <div class="container">
     ...
   </div>
   <div class="container">
     ...
   </div>
   <!-- etc -->

document.querySelector('.container-for-all').addEventListener('click', ({ target }) => {
  const closestTitle = target.closest('.title');
  if (!closestTitle) {
    return;
  }
  closestTitle.classList.toggle('titleselected');
});

关于javascript - 循环函数 document.getElementById(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55547588/

相关文章:

javascript - 使用 jQuery 更改点击时文本的颜色

javascript - Angular-foundation 多个指令要求嵌入

javascript - 为什么AudioBufferNode中的stop方法会破坏它?

javascript - 制作一个移动的圆圈

javascript - 我需要井字棋游戏的帮助,但我无法更改回合

javascript - knockout Js : dataObject is not defined

jquery - 如何使用 jQuery 使图像或列表项变灰,但使图像或列表项保持可点击状态?

ruby - Ruby 函数的这两种实现有什么区别?

syntax - 在PLT方案中循环

performance - OpenMP 通过三重 for 循环并行化矩阵乘法(性能问题)