0
votes

Working on an existing expand/collapse "FAQ" accordion page and looking to get the "expand/collapse" feature to work correctly.

I managed to get the page to start off with everything collapsed, but when I click on any column to expand and then click on another, the original one does not collapse.

Importantly, I would like to keep the search feature intact.

$('.collapse').collapse(); // Collapse all

// This section makes the search work.
(function() {
  var searchTerm, panelContainerId;
  $('#accordion_search_bar').on('change keyup', function() {
    searchTerm = $(this).val();
    $('#accordion > .panel').each(function() {
      panelContainerId = '#' + $(this).attr('id');

      // Makes search to be case insesitive 
      $.extend($.expr[':'], {
        'contains': function(elem, i, match, array) {
          return (elem.textContent || elem.innerText || '').toLowerCase()
            .indexOf((match[3] || "").toLowerCase()) >= 0;
        }
      });

      // END Makes search to be case insesitive

      // Show and Hide Triggers
      $(panelContainerId + ':not(:contains(' + searchTerm + '))').hide(); //Hide the rows that done contain the search query.
      $(panelContainerId + ':contains(' + searchTerm + ')').show(); //Show the rows that do!

    });
  });
}());
@import url('https://fonts.googleapis.com/css?family=Anton');
body {
  background: #29AB87;
  background-color:green;
}

h1 {
  font-family: 'Anton', sans-serif;
  color: #29AB87;
}

.input-group {
  margin-top: 20px;
  margin-bottom: 10px;
}

.panel {
  margin-top: 10px;
  background-color: rgba(255, 255, 255, .9)!important;
  border: solid 2px #ccc;
}

.panel-heading {
  background-color: #8AFFDF!important;
}

#accordion_search_bar {
  border: solid 2px #ccc;
}

.btn-default {
  border: solid 1.5px #ccc;
}

.fa-search {
  font-size: 1.3em;
}

.fa-paw {
  font-size: 1.4em;
  color: #6B7F7A;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
	<link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' rel='stylesheet'>
	<link href='https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css' rel='stylesheet'>
	<link href="css/style.css" rel="stylesheet">

<body>
	<div class="col-lg-12">
		<div class="container">
			<div class="row">
				<section class="panel panel-default">
					<div class="panel-body">
						<div class="row">
							<div class="col-lg-3">
								<h1>Animal Files</h1>
							</div>
							<div class="col-lg-9">
								<div class="input-group">
									<span class="input-group-btn"><button class="btn btn-default" type="button"><span class="input-group-btn"><i aria-hidden="true" class="fa fa-search"></i></span></button></span> <input class="form-control" id="accordion_search_bar" placeholder="Typing in a word like 'legless' will make snake the only accordion row available." type="search">
								</div><!-- /input-group -->
							</div><!-- /.col-lg-6 -->
						</div>
						<div class="row">
							<div class="col-lg-12 col-xs-12">
								<div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist">
									<div class="panel panel-default" id="collapseOne_container">
										<div class="panel-heading" id="headingOne" role="tab">
											<h4 class="panel-title"><a aria-controls="collapseOne" aria-expanded="true" data-parent="#accordion" data-toggle="collapse" href="#collapseOne" role="button"><i aria-hidden="true" class="fa fa-paw fa-fw"></i>Lion</a></h4>
										</div>
										<div aria-labelledby="headingOne" class="panel-collapse collapse in" id="collapseOne" role="tabpanel">
											<div class="panel-body">
												<p>The lion (Panthera leo) is one of the big cats in the genus Panthera and a member of the family Felidae. The commonly used term African lion collectively denotes the several subspecies in Africa. With some males exceeding 250 kg (550 lb) in weight, it is the second-largest living cat after the tiger. Wild lions currently exist in sub-Saharan Africa and in India (where an endangered remnant population resides in Gir Forest National Park). In ancient historic times, their range was in most of Africa, including North Africa, and across Eurasia from Greece and southeastern Europe to India. In the late Pleistocene, about 10,000 years ago, the lion was the most widespread large land mammal after humans: Panthera leo spelaea lived in northern and western Europe and Panthera leo atrox lived in the Americas from the Yukon to Peru.</p>
											</div>
										</div>
									</div>
									<div class="panel panel-default" id="collapseTwo_Container">
										<div class="panel-heading" id="headingTwo" role="tab">
											<h4 class="panel-title"><a aria-controls="collapseTwo" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseTwo" role="button"><i aria-hidden="true" class="fa fa-paw fa-fw"></i>Snake</a></h4>
										</div>
										<div aria-labelledby="headingTwo" class="panel-collapse collapse in" id="collapseTwo" role="tabpanel">
											<div class="panel-body">
												<p>Snakes are elongated, legless, carnivorous reptiles of the suborder Serpentes that can be distinguished from legless lizards by their lack of eyelids and external ears. Like all squamates, snakes are ectothermic, amniote vertebrates covered in overlapping scales. Many species of snakes have skulls with several more joints than their lizard ancestors, enabling them to swallow prey much larger than their heads with their highly mobile jaws. To accommodate their narrow bodies, snakes' paired organs (such as kidneys) appear one in front of the other instead of side by side, and most have only one functional lung. Some species retain a pelvic girdle with a pair of vestigial claws on either side of the cloaca.</p>
											</div>
										</div>
									</div>
									<div class="panel panel-default" id="collapseThree_Container">
										<div class="panel-heading" id="headingThree" role="tab">
											<h4 class="panel-title"><a aria-controls="collapseThree" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseThree" role="button"><i aria-hidden="true" class="fa fa-paw fa-fw"></i>Meerkat</a></h4>
										</div>
										<div aria-labelledby="headingThree" class="panel-collapse collapse in" id="collapseThree" role="tabpanel">
											<div class="panel-body">
												<p>The meerkat or suricate (Suricata suricatta) is a small carnivoran belonging to the mongoose family (Herpestidae). It is the only member of the genus Suricata. Meerkats live in all parts of the Kalahari Desert in Botswana, in much of the Namib Desert in Namibia and southwestern Angola, and in South Africa. A group of meerkats is called a "mob", "gang" or "clan". A meerkat clan often contains about 20 meerkats, but some super-families have 50 or more members. In captivity, meerkats have an average life span of 12–14 years, and about half this in the wild.</p>
											</div>
										</div>
									</div>
								</div>
								<p>Information is provided by Wikipedia</p>
							</div>
						</div><!-- Row -->
					</div><!-- Col -->
				</section>
			</div><!-- Container -->
		</div>
	</div>
</body>
</html>

All items start off collapsed and basically when the user clicks on the first paw to expand and then clicks on another paw, the first paw should "collapse". When user clicks on another paw to expand, the previous paw expanded should collapse so that only one item is left expanded at a time.

FAQ Accordion - Codepen Original Source

1
is that your code or code that you're replicating in the link? If it's not your current code, I suggest you add your html and css to the question [in a snippet preferably]. The link seems to be working. Users may expect to be able to open more than one at a time! - Rachel Gallen
Great question! I mentioned "existing code", so I went ahead and replicated it with some of the changes i'm trying to implement and also I updated the link so others can help troubleshoot. It is probably something I am overlooking.... need some more coffee I think.. - zmerlin
add your code here too. Links break and the codepen may become useless to future users (Also it's a pain opening external links).. - Rachel Gallen
made changes to the original as suggested...hopefully this should suffice. - zmerlin

1 Answers

1
votes

If you want the panels to start out collapsed, don't use the in class.

Calling $('.collapse').collapse(); doesn't collapse your panels, it reactivates the .collapse elements with the default options, overriding .in (so the panels are closed) and data-parent (so you lose the one-panel-at-a-time behavior).

You also don't need to define the :contains pseudo-selector three times on every keypress. Once is enough. And you don't need to explicitly loop over all #accordion's .panels, just use a sufficiently broad selector.

// Not necessary.
// $('.collapse').collapse();

// This section makes the search work.
(function() {
  // Makes search to be case insesitive 
  $.extend($.expr[':'], {
    'contains': function(elem, i, match, array) {
      return (elem.textContent || elem.innerText || '').toLowerCase()
        .indexOf((match[3] || "").toLowerCase()) >= 0;
    }
  });

  // END Makes search to be case insesitive

  $('#accordion_search_bar').on('change keyup', function() {
    var searchTerm = $(this).val();
    $('#accordion > .panel').hide(); // Hide all rows.
    $('#accordion > .panel:contains(' + searchTerm + ')').show(); // Show the rows that match the search query.
  });
}());
@import url('https://fonts.googleapis.com/css?family=Anton');
body {
  background: #29AB87;
  background-color: green;
}

h1 {
  font-family: 'Anton', sans-serif;
  color: #29AB87;
}

.input-group {
  margin-top: 20px;
  margin-bottom: 10px;
}

.panel {
  margin-top: 10px;
  background-color: rgba(255, 255, 255, .9)!important;
  border: solid 2px #ccc;
}

.panel-heading {
  background-color: #8AFFDF!important;
}

#accordion_search_bar {
  border: solid 2px #ccc;
}

.btn-default {
  border: solid 1.5px #ccc;
}

.fa-search {
  font-size: 1.3em;
}

.fa-paw {
  font-size: 1.4em;
  color: #6B7F7A;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' rel='stylesheet'>
<link href='https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css' rel='stylesheet'>
<link href="css/style.css" rel="stylesheet">

<body>
  <div class="col-lg-12">
    <div class="container">
      <div class="row">
        <section class="panel panel-default">
          <div class="panel-body">
            <div class="row">
              <div class="col-lg-3">
                <h1>Animal Files</h1>
              </div>
              <div class="col-lg-9">
                <div class="input-group">
                  <span class="input-group-btn"><button class="btn btn-default" type="button"><span class="input-group-btn"><i aria-hidden="true" class="fa fa-search"></i></span></button>
                  </span> <input class="form-control" id="accordion_search_bar" placeholder="Typing in a word like 'legless' will make snake the only accordion row available." type="search">
                </div>
                <!-- /input-group -->
              </div>
              <!-- /.col-lg-6 -->
            </div>
            <div class="row">
              <div class="col-lg-12 col-xs-12">
                <div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist">
                  <div class="panel panel-default" id="collapseOne_container">
                    <div class="panel-heading" id="headingOne" role="tab">
                      <h4 class="panel-title"><a aria-controls="collapseOne" aria-expanded="true" data-parent="#accordion" data-toggle="collapse" href="#collapseOne" role="button"><i aria-hidden="true" class="fa fa-paw fa-fw"></i>Lion</a></h4>
                    </div>
                    <div aria-labelledby="headingOne" class="panel-collapse collapse" id="collapseOne" role="tabpanel">
                      <div class="panel-body">
                        <p>The lion (Panthera leo) is one of the big cats in the genus Panthera and a member of the family Felidae. The commonly used term African lion collectively denotes the several subspecies in Africa. With some males exceeding 250 kg
                          (550 lb) in weight, it is the second-largest living cat after the tiger. Wild lions currently exist in sub-Saharan Africa and in India (where an endangered remnant population resides in Gir Forest National Park). In ancient historic
                          times, their range was in most of Africa, including North Africa, and across Eurasia from Greece and southeastern Europe to India. In the late Pleistocene, about 10,000 years ago, the lion was the most widespread large land mammal
                          after humans: Panthera leo spelaea lived in northern and western Europe and Panthera leo atrox lived in the Americas from the Yukon to Peru.</p>
                      </div>
                    </div>
                  </div>
                  <div class="panel panel-default" id="collapseTwo_Container">
                    <div class="panel-heading" id="headingTwo" role="tab">
                      <h4 class="panel-title"><a aria-controls="collapseTwo" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseTwo" role="button"><i aria-hidden="true" class="fa fa-paw fa-fw"></i>Snake</a></h4>
                    </div>
                    <div aria-labelledby="headingTwo" class="panel-collapse collapse" id="collapseTwo" role="tabpanel">
                      <div class="panel-body">
                        <p>Snakes are elongated, legless, carnivorous reptiles of the suborder Serpentes that can be distinguished from legless lizards by their lack of eyelids and external ears. Like all squamates, snakes are ectothermic, amniote vertebrates
                          covered in overlapping scales. Many species of snakes have skulls with several more joints than their lizard ancestors, enabling them to swallow prey much larger than their heads with their highly mobile jaws. To accommodate
                          their narrow bodies, snakes' paired organs (such as kidneys) appear one in front of the other instead of side by side, and most have only one functional lung. Some species retain a pelvic girdle with a pair of vestigial claws
                          on either side of the cloaca.</p>
                      </div>
                    </div>
                  </div>
                  <div class="panel panel-default" id="collapseThree_Container">
                    <div class="panel-heading" id="headingThree" role="tab">
                      <h4 class="panel-title"><a aria-controls="collapseThree" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#collapseThree" role="button"><i aria-hidden="true" class="fa fa-paw fa-fw"></i>Meerkat</a></h4>
                    </div>
                    <div aria-labelledby="headingThree" class="panel-collapse collapse" id="collapseThree" role="tabpanel">
                      <div class="panel-body">
                        <p>The meerkat or suricate (Suricata suricatta) is a small carnivoran belonging to the mongoose family (Herpestidae). It is the only member of the genus Suricata. Meerkats live in all parts of the Kalahari Desert in Botswana, in much
                          of the Namib Desert in Namibia and southwestern Angola, and in South Africa. A group of meerkats is called a "mob", "gang" or "clan". A meerkat clan often contains about 20 meerkats, but some super-families have 50 or more members.
                          In captivity, meerkats have an average life span of 12–14 years, and about half this in the wild.</p>
                      </div>
                    </div>
                  </div>
                </div>
                <p>Information is provided by Wikipedia</p>
              </div>
            </div>
            <!-- Row -->
          </div>
          <!-- Col -->
        </section>
      </div>
      <!-- Container -->
    </div>
  </div>
</body>

</html>