javascript - 常见问题 - Accordion 展开/折叠功能

标签 javascript html css twitter-bootstrap twitter-bootstrap-3

处理现有的展开/折叠“FAQ” Accordion 页面并希望“展开/折叠”功能正常工作。

我设法让页面开始时所有内容都折叠起来,但是当我单击任何列展开然后单击另一列时,原始列不会折叠。

重要的是,我想保持搜索功能不变。

$('.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>

所有元素都开始折叠,基本上当用户点击第一个爪子展开然后点击另一个爪子时,第一个爪子应该“折叠”。当用户点击另一个爪子展开时,前一个展开的爪子应该折叠起来,这样一次只有一个元素被展开。

FAQ Accordion - Codepen Original Source

最佳答案

如果您希望面板开始折叠,请不要使用 in class .

调用 $('.collapse').collapse(); 不会折叠面板,它 reactivates the .collapse elementsdefault options ,覆盖 .in(因此面板关闭)和 data-parent(因此您失去一次一个面板的行为)。

您也不需要在每次按键时都定义 3 次 :contains 伪选择器。一次就够了。而且您不需要明确地遍历所有 #accordion.panel,只需使用足够宽的选择器即可。

// 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>

关于javascript - 常见问题 - Accordion 展开/折叠功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55960410/

相关文章:

javascript - FB.login 回调未在 JavaScript 中调用

html - 在CSS中如何实现,两个单元格在固定宽度的父级中具有自动宽度,优先查看第二个单元格中的内容并在第一个单元格中使用省略号?

php - 使用一种形式将相同的输入发送到不同的操作

javascript - 图像 slider 未正确加载

javascript - CSS网格: nesting grids messes up the HEIGHT

html - Div 宽度扩展

javascript - 防止历史导航导致 React 中的重新加载

JavaScript:完成自己网站的相对 URL

javascript - 使用 agm 库在 Angular 2 中创建多边形

javascript - 检测浏览器是否禁用图像