【问题标题】:How to modify arrows in bootstrap accordion?如何修改引导手风琴中的箭头?
【发布时间】:2020-11-04 01:55:43
【问题描述】:

我编写了一些 JavaScript,并尝试在 aria-expanded 元素为真或假时替换该类,但似乎没有任何反应 第一张卡片在页面加载时打开,因为 aria-expanded ="true"。 每当更改 aria-expanded 元素的值时,我想找到一种方法来替换类。我是 jQuery 和 webdev 的新手,因此感谢您的所有帮助。 编辑-我使用引导手风琴来确保一次只能打开一个

<div id="headingOne">
    <h5 class="card-title">
        Or Files
        <a data-toggle="collapse" class="float-right" href="#collapseFiles" 
          role="button" aria-expanded="true" data-target="#collapseFiles" 
          aria-controls="collapseNotes">
            <i class="fas fa-angle-up></i>
        </a>
    </h5>
</div>
<div id="headingTwo">
             <h5 class="card-title">
             Or Notes
                <a data-toggle="collapse" class="float-right" href="#collapseNotes" role="button" aria-expanded="false" data-target="#collapseNotes" aria-controls="collapseNotes">
                        <i class="fas fa-angle-down"></i>
                </a>
              </h5>
  </div>
<div id="headingThree">
             <h5 class="card-title">
             Or Names
                <a data-toggle="collapse" class="float-right" href="#collapseNames" role="button" aria-expanded="false" data-target="#collapseNames" aria-controls="collapseNotes">
                        <i class="fas fa-angle-down"></i>
                </a>
              </h5>
  </div>

这是 jquery。

if ($('a').attr('aria-expanded').val() == 'true') {
    $("a i").attr("class", "fa-angle-down");
} else {
    $("a i").attr("class", "fa-angle-up");
}

【问题讨论】:

    标签: javascript jquery bootstrap-4 accordion


    【解决方案1】:

    您需要使用事件来捕捉变化,例如 https://api.jquery.com/on/

    【讨论】:

      【解决方案2】:

      试试这个:-

      $('[data-toggle="collapse"]').on('click', function(){
          if ($(this).attr('aria-expanded') == 'true') {
              $(this).find('i').addClass('fa-angle-up').removeClass('fa-angle-down');
          } else {
              $(this).find('i').addClass('fa-angle-down').removeClass('fa-angle-up');
          }
      });
      <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel='stylesheet'>
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
      <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" ></script>
      <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
      <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
      
      
      <div id="headingTwo">
          <h5 class="card-title">
              Or Notes
              <a data-toggle="collapse" class="float-right" href="#collapseNotes" role="button" aria-expanded="false" data-target="#collapseNotes" aria-controls="collapseNotes">
                  <i class="fa fa-angle-up"></i>
              </a>
          </h5>
      </div>
      <div class="collapse" id="collapseNotes">
          Anim pariatur cliche reprehenderit
      </div>

      【讨论】:

      • 这似乎也没有做出任何改变
      • 我已经添加了sn-p,现在你可以看到输出了。
      【解决方案3】:

      我知道你可能想用 JavaScript 来做,但我有一个纯 CSS 的方法来做:

      HTML

      我删除了锚标记上所有不必要的属性。我还删除了图标上的fa-angle-down。图标状态将通过 CSS 设置。

      <div id="headingOne">
          <h5 class="card-title">
              Or Files
              <a data-toggle="collapse" class="float-right" data-target="#collapseFiles">
                  <i class="fas"></i>
              </a>
          </h5>
          <div class="card-body">
              <p id="collapseFiles" class="card-text collapse show">
                  Some quick example text to build on the card title and make up the bulk of 
                  the card's content.
              </p>
          </div>
      </div>
      <div id="headingTwo">
          <h5 class="card-title">
              Or Notes
              <a data-toggle="collapse" class="float-right" data-target="#collapseNotes">
                  <i class="fas"></i>
              </a>
          </h5>
          <div class="card-body">
              <p id="collapseNotes" class="card-text collapse show">
                  Some quick example text to build on the card title and make up the bulk of 
                  the card's content.
              </p>
          </div>
      </div>
      <div id="headingThree">
          <h5 class="card-title">
              Or Name
              <a data-toggle="collapse" class="float-right" data-target="#collapseNames">
                  <i class="fas"></i>
              </a>
          </h5>
          <div  class="card-body">
              <p id="collapseNames" class="card-text collapse show">
                  Some quick example text to build on the card title and make up the bulk of 
                  the card's content.
              </p>
          </div>
      </div>
      

      CSS

      您可以编写 CSS 来定位任何具有 data-toggle="collapse" 属性的锚标记。当它折叠时,Bootstraps 会添加 .collapsed 类,以便您可以使用它来设置相应的图标样式。

      a[data-toggle="collapse"] i.fas:before {
          content: "\f107";    /* angle-down */
      }
      
      a[data-toggle="collapse"].collapsed i.fas:before {
          content: "\f106";    /* angle-up */
      }
      

      截图

      小提琴演示

      https://jsfiddle.net/davidliang2008/og1t8ksj/26/

      【讨论】:

      • 这似乎只适用于一个卡片元素。这是我的错误,我的问题中没有包含多个。如果您有任何建议,我已对问题进行了编辑。
      • @TerriSong:他们都在控制同一个#collapseNotes
      • 对此感到抱歉。复制时出错
      • @TerriSong:它仍然有效。请检查我的更新。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      相关资源
      最近更新 更多