Twitter bootstrap: adding a class to the open accordion title

前端 未结 11 751
-上瘾入骨i
-上瘾入骨i 2020-12-08 15:58

I am a jquery/javascript newbie. What I want to do is add a class to the open accordion title, and remove it when i open another.

heres the code:

&l         


        
相关标签:
11条回答
  • 2020-12-08 16:47

    https://jsfiddle.net/u2ay67Lo/6/

    HTML

        <div id="accordion2" class="accordion panel-group">
      <div class="accordion-group panel panel-default">
        <div class="panel-heading accordion-heading">
          <a href="#collapse5" data-parent="#accordion2" data-toggle="collapse" class="accordion-toggle panel-title">
                 Lorem ipsum dolor sit amet ..
                </a>
        </div>
        <div class="accordion-body collapse" id="collapse5">
          <div class="accordion-inner panel-body">
            <div class="row">
              <div class="col-md-10">
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur blandit faucibus elit nec mollis. Phasellus tempor urna tellus, eget lobortis magna porttitor eget. Sed risus ex, ultrices ac quam at, ultrices feugiat dolor. Mauris nec fermentum arcu.
                <br>
                <br>
                <i aria-hidden="true" class="fa fa-file-pdf-o"></i> <a href="#">Peças escritas e desenhadas (39.5 MB)</a>
                <br>
                <i aria-hidden="true" class="fa fa-file-pdf-o"></i> <a href="#">Formulário de Participação (101 KB)</a>
              </div>
              <div class="col-md-2">
                <button class="pull-right" href="#">Participa</button>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="accordion-group panel panel-default">
        <div class="panel-heading accordion-heading">
          <a href="#collapse7" data-parent="#accordion2" data-toggle="collapse" class="accordion-toggle panel-title">
                   Donec vitae efficitur magna...
                </a>
        </div>
        <div class="accordion-body collapse" id="collapse7">
          <div class="accordion-inner panel-body">
            <div class="row">
              <div class="col-md-10">
                Donec vitae efficitur magna, non iaculis sapien. Pellentesque ut leo turpis. Sed aliquet, lorem vel sollicitudin pretium, sapien augue rutrum risus, eu ultricies risus est in nibh. Etiam molestie non lorem in mollis. Cras non mi tempus, varius elit id,
                ultrices diam. Vestibulum bibendum lacus vitae augue interdum, ut ultricies elit aliquam. Fusce rhoncus nunc convallis luctus ornare. Curabitur vulputate posuere ligula in eleifend. Vivamus commodo mi sed felis dignissim, rutrum pharetra odio
                varius. Sed vel aliquet tortor. Nunc sit amet nibh eget sem elementum pulvinar. Maecenas et felis at felis venenatis lacinia vitae sit amet nulla.
                <br>
                <br>
                <i aria-hidden="true" class="fa fa-file-pdf-o"></i> <a href="#">Peças escritas e desenhadas (39.5 MB)</a>
                <br>
                <i aria-hidden="true" class="fa fa-file-pdf-o"></i> <a href="#">Formulário de Participação (101 KB)</a>
              </div>
              <div class="col-md-2">
                <button class="pull-right" href="#">Participa</button>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="accordion-group panel panel-default">
        <div class="panel-heading accordion-heading">
          <a href="#collapse8" data-parent="#accordion2" data-toggle="collapse" class="accordion-toggle panel-title">
                  Maecenas et felis at felis...
                </a>
        </div>
        <div class="accordion-body collapse" id="collapse8">
          <div class="accordion-inner panel-body">
            <div class="row">
              <div class="col-md-10">
                Maecenas et felis at felis venenatis lacinia vitae sit amet nulla.Morbi tempor facilisis aliquam. Suspendisse ac velit ut lectus vehicula finibus imperdiet et leo.
                <br>
                <br>
                <i aria-hidden="true" class="fa fa-file-pdf-o"></i> <a href="#">Peças escritas e desenhadas (39.5 MB)</a>
                <br>
                <i aria-hidden="true" class="fa fa-file-pdf-o"></i> <a href="#">Formulário de Participação (101 KB)</a>
              </div>
              <div class="col-md-2">
                <button class="pull-right" href="#">Button1</button>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="accordion-group panel panel-default">
        <div class="panel-heading accordion-heading">
          <a href="#collapse9" data-parent="#accordion2" data-toggle="collapse" class="accordion-toggle panel-title">
                   Quisque placerat in dui quis vestibulum. ..
                </a>
        </div>
        <div class="accordion-body collapse" id="collapse9">
          <div class="accordion-inner panel-body">
            <div class="row">
              <div class="col-md-10">
                Quisque placerat in dui quis vestibulum. Morbi tempor facilisis aliquam. Suspendisse ac velit ut lectus vehicula finibus imperdiet et leo. Mauris commodo auctor tellus, at lobortis sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra,
                per inceptos himenaeos. Morbi fringilla lectus et urna blandit porta. Aliquam sed dolor gravida tellus pharetra laoreet in vel dolor. Sed cursus lacus vel metus porttitor, sed tempus enim pharetra. Vestibulum malesuada faucibus diam hendrerit
                molestie. Aenean eget malesuada ipsum. Phasellus vitae erat at tellus aliquet sollicitudin. Integer nec neque nec felis egestas efficitur. Aliquam sodales est neque, in vulputate orci cursus in. Nunc ac leo suscipit, porttitor tellus non,
                fermentum eros. Sed aliquet elit at est consequat, et semper risus porta.
                <br>
                <br>
                <i aria-hidden="true" class="fa fa-file-pdf-o"></i> <a href="#">File1 (39.5 MB)</a>
                <br>
                <i aria-hidden="true" class="fa fa-file-pdf-o"></i> <a href="#">Formulário de Participação (101 KB)</a>
              </div>
              <div class="col-md-2">
                <button class="pull-right" href="#">Test</button>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    

    JavaScript

    $(function() {
      $('a.accordion-toggle').click(function(e) {
        e.preventDefault();
        if (!$(this).parent().hasClass('accordionPannelActive')) {
          $('.accordion-heading').removeClass('accordionPannelActive').find('a').removeClass('accordionPannelActive');
          $(this).parent().addClass('accordionPannelActive').find('a').addClass('accordionPannelActive');
        } else {
          $('.accordion-heading').removeClass('accordionPannelActive').next().removeClass('accordionPannelActive');
          $(this).parent().find('a').removeClass('accordionPannelActive');
        }
      });
    });
    

    CSS

    .accordionPannelActive {
          background-color: #8dc640!important;
          color: white !important;
    }
    
    a.accordion-title:focus {
          color: inherit;
          text-decoration: none;
    }
    
    .panel-default > .panel-heading {
          background-image: none;
    }
    
    a.accordion-title:hover {
          color: inherit;
          background-color: inherit;
          text-decoration: none;
    }
    
    .panel-default > .panel-heading {
          background-image: none;
    }
    .panel-title{
          display:block;
    }
    

    Needs: jquery.min.js, jquery.min.js, bootstrap.min.css, bootstrap-theme.min.css and bootstrap.min.js

    0 讨论(0)
  • 2020-12-08 16:49

    I was also Looking to add an "active" class or similar but I noticed during inspection that when inactive all the links have a class of "collapsed" that is removed when the tab/link is selected, thus I simply tageted the tab without the "collapsed" class.

    0 讨论(0)
  • 2020-12-08 16:54

    You can use the Collapse events for this.

    $(function() {
    
        $('.accordion').on('show', function (e) {
             $(e.target).prev('.accordion-heading').find('.accordion-toggle').addClass('active');
        });
    
        $('.accordion').on('hide', function (e) {
            $(this).find('.accordion-toggle').not($(e.target)).removeClass('active');
        });
    
    });​
    

    Here's a JsFiddle http://jsfiddle.net/D2RLR/251/

    0 讨论(0)
  • 2020-12-08 16:55

    I've tried Michael D. Irizarry's solution but that didn't work for me. So I came up with my own code:

    $(function() {
        $('a.accordion-toggle').click(function(e) {
            e.preventDefault();
            if(!$(this).parent().hasClass('active')) {
                $('.accordion-heading').removeClass('active');
                $('.accordion-body').removeClass('active');
                $(this).parent().addClass('active').next().addClass('active');
            } else {
                $('.accordion-heading').removeClass('active');
                $('.accordion-body').removeClass('active');
            }
        });
    });
    

    If the accordion-heading already does not have a class of active, all accordion-headings & bodies lose the active class, and the one that has been clicked and it's corresponding body tag will get the class added.

    If it already has the class active (so if it is already open and been clicked) then the active class is removed and nothing else happens.

    0 讨论(0)
  • 2020-12-08 16:55

    I think this is the simplest way so far.

    $('a.accordion-toggle').on('click', function () {
      $('a.accordion-toggle').removeClass('active');
      $(this).addClass('active');
    });
    
    0 讨论(0)
提交回复
热议问题