javascript - SlideToggle 仅适用于具有类的第一个元素的属性
问题描述
我正在尝试创建一个下拉手风琴框,单击该框时会在“+”和“-”之间切换。我得到了这个与一个盒子一起工作。但我想在一个盒子里有一个盒子。由于某种原因,“+”和“-”不适用于所有框,仅适用于第一个框。单击时它将变为“-”,但再次单击时不会变回“+”。我假设我需要某种功能,但我不知道把它放在哪里。
你可以在https://codepen.io/rebeccagracedesigns/pen/GRrGvGK看到一个例子
这是 HTML
<div class="dropdown">
<h2 class="question">This is a question.</h2>
<div class="drop-down-contents">
<div class="dropdown">
<h3 class="question">This is a question.</h3>
<div class="drop-down-contents">
<div class="dropdown">
<h4 class="question">This is a question.</h4>
<div class="drop-down-contents">
<p>This is a paragraph.</p>
</div>
</div>
<div class="dropdown">
<h4 class="question">This is a question.</h4>
<div class="drop-down-contents">
<p>This is a paragraph.</p>
</div>
</div>
<div class="dropdown">
<h4 class="question">This is a question.</h4>
<div class="drop-down-contents">
<p>This is a paragraph.</p>
</div>
</div>
</div>
</div>
<div class="dropdown">
<h3 class="question">This is a question.</h3>
<div class="drop-down-contents">
<p>This is a paragraph.</p>
</div>
</div>
</div>
</div>
这是 jQuery
$(".question").attr("dropdown-arrow", "+");
$(".question").click(function() {
$(this)
.nextUntil(".question")
.slideToggle("slow", function () {
if ($(".drop-down-contents").is(":visible")) {
$(this).siblings(".question").attr("dropdown-arrow", "-");
} else {
$(".question").attr("dropdown-arrow", "+");
}
});
});
解决方案
试试下面的片段
$(".question").attr("dropdown-arrow", "+");
$(".question").click(function() {
$(this)
.nextUntil(".question")
.slideToggle("slow", function () {
if ($(this).closest(".drop-down-contents").is(":visible")) {
$(this).closest(".drop-down-contents").prev(".question").attr("dropdown-arrow", "-");
} else {
$(this).closest(".drop-down-contents").prev(".question").attr("dropdown-arrow", "+");
}
});
});
/* Dropdown Box */
.question {
padding: 10px;
outline: black solid 3px;
outline-offset: 3px;
margin: auto 0px;
background: black;
color: #FFFFFF;
margin: 20px 0px;
cursor: pointer;
}
.dropdown h2{
font-size: 1.5rem; /*question font size */
}
.dropdown h3{
font-size: 1.3rem; /*question font size */
}
.dropdown h4{
font-size: 1rem; /*question font size */
}
.drop-down-contents {
display:none;
padding-left: 2vw; /*space between line and answer */
}
.question:after{
content: attr(dropdown-arrow);
text-align:right;
float: right;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="dropdown">
<h2 class="question">This is a question.</h2>
<div class="drop-down-contents">
<div class="dropdown">
<h3 class="question">This is a question.</h3>
<div class="drop-down-contents">
<div class="dropdown">
<h4 class="question">This is a question.</h4>
<div class="drop-down-contents">
<p>This is a paragraph.</p>
</div>
</div>
<div class="dropdown">
<h4 class="question">This is a question.</h4>
<div class="drop-down-contents">
<p>This is a paragraph.</p>
</div>
</div>
<div class="dropdown">
<h4 class="question">This is a question.</h4>
<div class="drop-down-contents">
<p>This is a paragraph.</p>
</div>
</div>
</div>
</div>
<div class="dropdown">
<h3 class="question">This is a question.</h3>
<div class="drop-down-contents">
<p>This is a paragraph.</p>
</div>
</div>
</div>
</div>
推荐阅读
- java - 无法自动接线。找不到“存储库”类型的 bean
- nmap - 与 IPv4 一起使用时出现奇怪的错误“(22 - '无效参数')”
- javascript - Bixby javascript - 如何获取用户当前位置
- reactjs - 映射到具有不同路径的私有和常规路由中的相同组件 - 与私有路由中的相同
- c - Keil uVision 调试步骤通过项目外的代码
- python - 使用 boto3 将文件上传到 Amazon S3 存储桶中的特定位置?
- streamsets - 特殊字符(重音、撇号、trema)在自定义源测试中有效,但在部署在 dockerized Streamsets 中时不再有效
- c# - 使用 C# 检查一组不断变化的整数范围
- java - 多上下文 spring-boot 应用程序:如何为每个子上下文定义标准 spring-boot 属性
- oop - 带有材料清单的课程:最佳实践