javascript - 引用非活动轮播项目中的元素
问题描述
在轮播中查找问题时,我遇到了搜索框问题。
搜索框用于在 FAQ 列表中查找问题。
当用户从搜索框中单击一个问题时,href 会将他带到轮播中的该特定问题。但是,如果我选择的问题不在轮播的当前活动项目中,则不会发生任何事情。例如,如果我在轮播的第一个选项卡上搜索“问题 3”,我找不到任何“问题 3”(参见代码中的示例)。
我该如何解决这个问题?
//LOADER
$(window).on("load",function(){
$(".loader-wrapper").fadeOut("slow");
});
// searchbox
function myFunction() {
// Declare variables
var input, filter, ul, li, a, i, txtValue;
input = document.getElementById('myInput');
filter = input.value.toUpperCase();
ul = document.getElementById("myUL");
li = ul.getElementsByTagName('li');
// Hide countries when no input is given
if (input.value.length == 0) {
ul.style.display = "none";
return;
} else {
ul.style.display = "block";
}
// Loop through all list items, and hide those who don't match the search query
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("a")[0];
txtValue = a.textContent || a.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "block";
} else {
li[i].style.display = "none";
}
}
}
// FAQs
const items = document.querySelectorAll(".accordion button");
function toggleAccordion() {
const itemToggle = this.getAttribute('aria-expanded');
for (i = 0; i < items.length; i++) {
items[i].setAttribute('aria-expanded', 'false');
}
if (itemToggle == 'false') {
this.setAttribute('aria-expanded', 'true');
}
}
items.forEach(item => item.addEventListener('click', toggleAccordion));
body{
background-color: #cddadaff;
}
/* - - - - CAROUSEL - - - - */
.carousel-indicators li {
background-color: #17171cff;
width: 10px;
height: 10px;
border-radius: 100%;
}
.carousel-indicators {
position: absolute;
bottom: -100px;
}
#FAQlist {
padding: 6% 15% 2%;
}
#FAQs {
padding-bottom: 450px;
}
/* - - - - Searchbar - - - - */
#myInput {
background-position: 10px 12px;
/* Position the search icon */
background-repeat: no-repeat;
/* Do not repeat the icon image */
width: 100%;
/* Full-width */
font-size: 16px;
/* Increase font-size */
padding: 12px 20px 12px 40px;
/* Add some padding */
border: 1px solid #ddd;
/* Add a grey border */
margin-bottom: 12px;
/* Add some space below the input */
font-weight: lighter;
}
#myUL {
/* Remove default list styling */
list-style-type: none;
padding: 0;
margin: 0;
}
#myUL li {
margin: 0px;
}
#myUL li a {
border: 1px solid #ddd;
/* Add a border to all links */
margin-top: -1px;
/* Prevent double borders */
background-color: #f6f6f6;
/* Grey background color */
padding: 12px;
/* Add some padding */
text-decoration: none;
/* Remove default text underline */
font-size: 18px;
/* Increase the font-size */
color: black;
/* Add a black text color */
display: block;
/* Make it into a block element to fill the whole list */
}
#myUL li a:hover:not(.header) {
background-color: #eee;
/* Add a hover effect to all links, except for headers */
}
/* Style the search field */
form.example input[type=text] {
padding: 10px;
font-size: 17px;
border: 1px solid grey;
float: left;
width: 80%;
background: #f1f1f1;
}
/* - - - - FAQ - - - - */
@import url('https://fonts.googleapis.com/css?family=Hind:300,400&display=swap');
* {
box-sizing: border-box;
}
*::before, *::after {
box-sizing: border-box;
}
.containerFAQ {
margin: 0 auto;
padding: 0;
width: 80%;
}
.accordion .accordion-item {
border-bottom: 1px solid #e5e5e5;
}
.accordion .accordion-item button[aria-expanded='true'] {
border-bottom: 1px solid #03b5d2;
}
.accordion button {
position: relative;
display: block;
text-align: left;
width: 100%;
padding: 1em 0;
color: #7288a2;
font-size: 1.15rem;
font-weight: 400;
border: none;
background: none;
outline: none;
}
.accordion button:hover, .accordion button:focus {
cursor: pointer;
color: #03b5d2;
}
.accordion button:hover::after, .accordion button:focus::after {
cursor: pointer;
color: #03b5d2;
border: 1px solid #03b5d2;
}
.accordion button .accordion-title {
padding: 1em 1.5em 1em 0;
}
.accordion button .icon {
display: inline-block;
position: absolute;
top: 18px;
right: 0;
width: 22px;
height: 22px;
border: 1px solid;
border-radius: 22px;
}
.accordion button .icon::before {
display: block;
position: absolute;
content: '';
top: 9px;
left: 5px;
width: 10px;
height: 2px;
background: currentColor;
}
.accordion button .icon::after {
display: block;
position: absolute;
content: '';
top: 5px;
left: 9px;
width: 2px;
height: 10px;
background: currentColor;
}
.accordion button[aria-expanded='true'] {
color: #03b5d2;
}
.accordion button[aria-expanded='true'] .icon::after {
width: 0;
}
.accordion button[aria-expanded='true'] + .accordion-content {
opacity: 1;
max-height: 60em;
transition: all 200ms linear;
will-change: opacity, max-height;
}
.accordion .accordion-content {
opacity: 0;
max-height: 0;
overflow: hidden;
transition: opacity 200ms linear, max-height 200ms linear;
will-change: opacity, max-height;
}
.accordion .accordion-content p, li {
font-size: 1rem;
font-weight: 300;
margin: 2em 0;
color: #8f8f8f;
}
/* dividers */
.heading-1 {
font-family: "PTSerif-Regular", serif;
font-size: 28px;
letter-spacing: 0.08em;
font-weight: 300;
color: #17171cff;
text-shadow: 0 1px 1px #FFFFFF;
}
.divider-1 {
border-bottom: 1px solid #96c5b0ff;
background-color: black;
height: 1px;
margin: 0.5em 0px 1.5em;
}
.divider-1 span {
display: block;
width: 444px;
height: 1px;
background-color: #17171cff;
}
.divider-2 {
border-bottom: 1px solid #96c5b0ff;
background-color: black;
height: 1px;
margin: 0.5em 0px 1.5em;
}
.divider-2 span {
display: block;
width: 486px;
height: 1px;
background-color: #17171cff;
}
.dividerline {
padding: 0 10% 0 10%;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/styles.css">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=PT+Serif:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link rel="stylesheet" href="css/styles.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.10.2/css/all.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.10.2/css/v4-shims.css">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<title></title>
</head>
<body>
<!-- SearchBar -->
<section id="FAQlist">
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Type a question..">
<ul id="myUL" style="display: none">
<li><a href="#accordion-button-1">Question1?</a></li>
<li><a href="#accordion-button-2">Question2?</a></li>
<li><a href="#accordion-button-3">Question3?</a></li>
<li><a href="#accordion-button-4">Question4?</a></li>
<li><a href="#accordion-button-5">Question5?</a></li>
<li><a href="#accordion-button-6">Question6?</a></li>
</ul>
</section>
<!-- FAQs -->
<section id="FAQs">
<div class="dividerline">
<h1 class="heading-1">Frequently asked questions</h1>
<div class="divider-1"> <span></span>
</div>
</div>
<div id="slider" class="carousel slide" data-ride="carousel" data-interval="5000">
<ol class="carousel-indicators">
<li data-target="#slider" class="active" data-slide-to="0"></li>
<li data-target="#slider" data-slide-to="1"></li>
<li data-target="#slider" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<div class="containerFAQ">
<div class="accordion">
<div class="accordion-item">
<button id="accordion-button-1" aria-expanded="false"><span class="accordion-title">Question1?</span><span class="icon" aria-hidden="true"></span></button>
<div class="accordion-content">
<p>Answer1</p>
</div>
</div>
<div class="accordion-item">
<button id="accordion-button-2" aria-expanded="false"><span class="accordion-title">Question2?</span><span class="icon" aria-hidden="true"></span></button>
<div class="accordion-content">
<p>Answer2</p>
</div>
</div>
</div>
</div>
</div>
<div class="carousel-item">
<div class="containerFAQ">
<div class="accordion">
<div class="accordion-item">
<button id="accordion-button-3" aria-expanded="false"><span class="accordion-title">Question3?</span><span class="icon" aria-hidden="true"></span></button>
<div class="accordion-content">
<p>Answer3</p>
</div>
</div>
<div class="accordion-item">
<button id="accordion-button-4" aria-expanded="false"><span class="accordion-title">Question4?</span><span class="icon" aria-hidden="true"></span></button>
<div class="accordion-content">
<p>Answer4</p>
</div>
</div>
</div>
</div>
</div>
<div class="carousel-item">
<div class="containerFAQ">
<div class="accordion">
<div class="accordion-item">
<button id="accordion-button-5" aria-expanded="false"><span class="accordion-title">Question5?</span><span class="icon" aria-hidden="true"></span></button>
<div class="accordion-content">
<p>Answer5</p>
</div>
</div>
<div class="accordion-item">
<button id="accordion-button-6" aria-expanded="false"><span class="accordion-title">Question6?</span><span class="icon" aria-hidden="true"></span></button>
<div class="accordion-content">
<p>Answer6</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</body>
<script src="switch.js" charset="utf-8"></script>
</html>
解决方案
选择问题时,您似乎需要激活轮播的相关“面板”。
因此,如果我们在包含问题 1 和 2 的“面板 1”上,并且您从搜索栏中选择“问题 3”,则需要将面板 2 设为“活动”(通过活动类),然后执行您目前正在专注于问题 3
推荐阅读
- django - Django 休息和 axios 帖子
- kotlin - Kotlin - 如何为成员字段执行索引访问器?
- angular - 通过 .ts 文件 Angular 访问 html 内容
- java - java使用SSL发送post请求,PKIX错误
- django - Django 使 CreateView 需要布尔字段
- python - Django 动态类别
- javascript - 单击时如何停止setinterval
- jquery - 使内容在所有电话设备上保持在一行中
- android - Oreo - 应用程序关闭时未收到通知,但在后台运行正常
- django - Django 抛出“禁止直接分配到多对多集合的前端。” 错误