jquery - 使用 jQuery 为活动下拉列表的父级着色,同时它处于活动状态
问题描述
我正在为我的班级制作一个网站作为一个项目(使用 HTML、CSS、JavaScript 主要用于正则表达式和 jQuery 用于效果)。我一直坚持的事情如下:
我一直在尝试为活动的 li 标签着色(它有一个嵌套的 ul 标签,其中包含 1 个 li 元素),说它的顶部和底部边框着色,为父 li 标签的文本着色并删除 Font Awesome 的加号和添加减号。因此,默认情况下,减号是隐藏的,加号是活动的并且是红色的,父 li 标签的文本是白色的,它的顶部和机器人边框是 1px 实心和灰色。当我单击它时,我希望它下拉(已经这样做了),删除红色加号,添加减号,将 li 标签的文本着色为红色,并使其边框为 2px 纯红色(顶部和底部)。
<div id="wrapperFAQ">
<h2 id="h2FAQ">Frequently Asked Questions</h2>
<ul id="listaPitanja">
<li><i class="fas fa-plus activeTab"></i><i class="fas fa-minus"></i> Who are we?
<ul>
<li>You can find more about us on our <a href="#">about us</a> page.</li>
</ul>
</li>
<li><i class="fas fa-plus activeTab"></i><i class="fas fa-minus"></i> What products do we have?
<ul>
<li>a</li>
</ul>
</li>
<li><i class="fas fa-plus activeTab"></i><i class="fas fa-minus"></i> I have a hardware issue!
<ul>
<li></li>
</ul>
</li>
<li><i class="fas fa-plus activeTab"></i><i class="fas fa-minus"></i> Where can I find your shop?
<ul>
<li></li>
</ul>
</li>
<li><i class="fas fa-plus activeTab"></i><i class="fas fa-minus"></i> Will you have "x" products in the future?
<ul>
<li></li>
</ul>
</li>
</ul>
<p>Can't find your question on the list?
Send us an <a href="#">e-mail!</a></p>
</div>
这是 HTML,这是 CSS:
#wrapperFAQ{
width: 80%;
padding:15px;
margin: 0px auto;
}
#h2FAQ{
font-size:4vw;
color:red;
float:left;
border-bottom:3px solid red;
border-left:5px solid red;
}
#listaPitanja{
float:left;
margin: 10px 20px;
padding: 5px 20px;
}
#listaPitanja li{
cursor:pointer;
border-top:1px solid gray;
border-bottom:1px solid gray;
padding: 15px;
}
.fa-minus::before,.fa-plus::before{
color:red;
}
#listaPitanja li ul,.fa-minus::before{
display:none;
}
#listaPitanja, #listapitanja li ul{
list-style:none;
width: 85%;
margin: 0px auto;
color:white;
margin: 10px 0px 0px 15px;
}
#listaPitanja li ul li{
border:none;
}
.activeTab{
display:block;
}
#wrapperFAQ p, #wrapperFAQ p a{
font-size:2vw;
color:gray;
font-weight:strong;
text-align:center;
text-decoration:none;
width: 69%;
}
.aktivna{
border-top: 2px solid red !important;
color: red;
}
这是 jQuery:
$('#wrapperFAQ ul > li ul')
.click(function(e){
e.stopPropagation();
})
.filter(':not(:first)')
.hide();
$('#wrapperFAQ ul li').click(function(){
var selfClick = $(this).find('ul:first').is(':visible');
if(!selfClick) {
$(this)
.parent()
.find('> li ul:visible')
.slideToggle();
$(this).addClass("aktivna");
}
$(this)
.find('ul:first')
.stop(true, true)
.slideToggle()
});
现在,我确实从我在网上找到的文件中复制了这个确切的代码,大部分我都理解,除了“stopPropagation”部分,它是“e”参数(甚至不知道它来自哪里)以及它应该做什么,因为当我删除它时,视觉上不会发生任何不想要的事情。
此外,您可以看到我确实将“aktivna”类添加到“活动”菜单中(CSS 中的类本身只有颜色:红色;边框顶部和底部设置为 2px 纯红色,末尾带有 !important)。问题是,我如何使用现有代码实现“非活动”方式?更准确地说,如果我打开另一个选项卡,我希望将活动 li 标签上的类删除并添加到另一个(打开一个关闭最后一个)。我确实尝试过摆弄代码;例如,我在切换 $(this) 并删除类后尝试移动到 $(this) 的父级,但我得到的结果是活动选项卡获取了 class=""...这让我很困惑,也许我是对我的代码如何工作有一点误解,我不知道,这就是我坚持的地方;颜色,边框,
解决方案
提示:使用类来帮助避免对列表、列表项和嵌套列表感到困惑。
$(".toggleItem").click(function() {
// Remove active class from sibling toggleItems
$(this)
.parent()
.find(".toggleItem")
.removeClass("aktivna");
// Check if we have clicked on a toggleItem that has an open toggleList
var selfClick = $(this)
.find(".toggleList")
.is(":visible");
if (!selfClick) {
// Close the open toggleList
$(this)
.parent()
.find(".toggleList:visible")
.slideToggle();
// Add active class to the clicked toggleItem
$(this).addClass("aktivna");
}
// Open / close to the clicked toggleItem's toggleList
$(this)
.find(".toggleList")
.stop(true, true)
.slideToggle();
});
#wrapperFAQ {
width: 80%;
padding: 15px;
margin: 0px auto;
}
#h2FAQ {
font-size: 4vw;
color: red;
float: left;
border-bottom: 3px solid red;
border-left: 5px solid red;
}
#listaPitanja {
float: left;
margin: 10px 20px;
padding: 5px 20px;
}
#listaPitanja li {
cursor: pointer;
border-top: 1px solid gray;
border-bottom: 1px solid gray;
padding: 15px;
}
.fa-minus::before,
.fa-plus::before {
color: red;
}
#listaPitanja li ul,
.fa-minus::before {
display: none;
}
#listaPitanja,
#listapitanja li ul {
list-style: none;
width: 85%;
margin: 0px auto;
//color: white;
margin: 10px 0px 0px 15px;
}
#listaPitanja li ul li {
border: none;
}
.activeTab {
display: block;
}
#wrapperFAQ p,
#wrapperFAQ p a {
font-size: 2vw;
color: gray;
font-weight: strong;
text-align: center;
text-decoration: none;
width: 69%;
}
.aktivna {
border-top: 2px solid red !important;
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="wrapperFAQ">
<ul id="listaPitanja">
<li class="toggleItem"><i class="fas fa-plus activeTab"></i><i class="fas fa-minus"></i> Who are we?
<ul class="toggleList">
<li>You can find more about us on our <a href="#">about us</a> page.</li>
</ul>
</li>
<li class="toggleItem"><i class="fas fa-plus activeTab"></i><i class="fas fa-minus"></i> What products do we have?
<ul class="toggleList">
<li>a</li>
</ul>
</li>
<li class="toggleItem"><i class="fas fa-plus activeTab"></i><i class="fas fa-minus"></i> I have a hardware issue!
<ul class="toggleList">
<li></li>
</ul>
</li>
<li class="toggleItem"><i class="fas fa-plus activeTab"></i><i class="fas fa-minus"></i> Where can I find your shop?
<ul class="toggleList">
<li></li>
</ul>
</li>
<li class="toggleItem"><i class="fas fa-plus activeTab"></i><i class="fas fa-minus"></i> Will you have "x" products in the future?
<ul class="toggleList">
<li></li>
</ul>
</li>
</ul>
<p>Can't find your question on the list? Send us an <a href="#">e-mail!</a></p>
</div>
推荐阅读
- prestashop - Prestashop 1.6 - 来自订单详细信息仪表板中编辑产品选项卡的附件
- filter - 为什么我的 python Butterworth 滤波器平滑信号频谱(在频率空间中)?
- angular - 将模拟 DOM 事件传递给 Angular 中的组件方法以进行单元测试
- kotlin - 如何在链内的 RXJava2 中使用 .delay() 和 .timer()?
- c# - 如何使用 ExcelReader 将数据导入数据库
- python - 从基于自定义类的视图继承的基于类的视图在父级中看不到上下文变量
- tsql - 用 TSQL 中的 Newid() 值替换 Dense_Rank() 值?
- c# - 调试 C# 时为什么不能更改字典键值对的计数?
- apache - 无法在 ubuntu 中启动 phpmyadmin
- sql - 日期时间的 Floor() 函数 - SQL Server