gpt4 book ai didi

javascript - 如何为 "nested" Accordion 添加事件状态

转载 作者:行者123 更新时间:2023-11-28 05:38:07 27 4
gpt4 key购买 nike

我在 codepen 中使用“ul”找到了这个高效实用的嵌套 Accordion :https://codepen.io/brenden/pen/Kwbpyj

如下:

$('.toggle').click(function(e) {
e.preventDefault();

var $this = $(this);

if ($this.next().hasClass('show')) {
$this.next().removeClass('show');
$this.next().slideUp(350);
} else {
$this.parent().parent().find('li .inner').removeClass('show');
$this.parent().parent().find('li .inner').slideUp(350);
$this.next().toggleClass('show');
$this.next().slideToggle(350);
}
});
url('http://fonts.googleapis.com/css?family=Pacifico|Open+Sans:300,400,600');
* {
box-sizing: border-box;
font-family: 'Open Sans', sans-serif;
font-weight: 300;
}
.active {
text-decoration: underline !important;
}
a {
text-decoration: none;
color: inherit;
}
p {
font-size: 1.1em;
margin: 1em 0;
}
.description {
margin: 1em auto 2.25em;
}
body {
width: 40%;
min-width: 300px;
max-width: 400px;
margin: 1.5em auto;
color: #333;
}
h1 {
font-family: 'Pacifico', cursive;
font-weight: 400;
font-size: 2.5em;
}
ul {
list-style: none;
padding: 0;
}
ul .inner {
padding-left: 1em;
overflow: hidden;
display: none;
}
ul .inner.show {
/*display: block;*/
}
ul li {
margin: .5em 0;
}
ul li a.toggle {
width: 100%;
display: block;
background: rgba(0, 0, 0, 0.78);
color: #fefefe;
padding: .75em;
border-radius: 0.15em;
transition: background .3s ease;
}
ul li a.toggle:hover {
background: rgba(0, 0, 0, 0.9);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<h1>A Cool Accordion</h1>

<p class="description">
You could simply toggle the .show class (if display: block is uncommented in the CSS) in JavaScript, but you'll lose the animation.
</p>

<ul class="accordion">
<li>
<a class="toggle" href="javascript:void(0);">Item 1</a>
<ul class="inner">
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</li>

<li>
<a class="toggle" href="javascript:void(0);">Item 2</a>
<ul class="inner">
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
</ul>
</li>

<li>
<a class="toggle" href="javascript:void(0);">Item 3</a>
<ul class="inner">
<li>
<a href="#" class="toggle">Open Inner</a>
<div class="inner">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus placerat fringilla. Duis a elit et dolor laoreet volutpat. Aliquam ultrices mauris id mattis imperdiet. Aenean cursus ultrices justo et varius. Suspendisse aliquam orci id dui dapibus
blandit. In hac habitasse platea dictumst. Sed risus velit, pellentesque eu enim ac, ultricies pretium felis.
</p>
</div>
</li>

<li>
<a href="#" class="toggle">Open Inner #2</a>
<div class="inner">
<p>
Children will automatically close upon closing its parent.
</p>
</div>
</li>

<li>Option 3</li>
</ul>
</li>

<li>
<a class="toggle" href="javascript:void(0);">Item 4</a>
<ul class="inner">
<li>
<a href="#" class="toggle">Technically any number of nested elements</a>
<ul class="inner">
<li>
<a href="#" class="toggle">Another nested element</a>
<div class="inner">
<p>
As long as the inner element has inner as one of its classes then it will be toggled.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus placerat fringilla. Duis a elit et dolor laoreet volutpat. Aliquam ultrices mauris id mattis imperdiet. Aenean cursus ultrices justo et varius. Suspendisse aliquam orci id dui dapibus
blandit. In hac habitasse platea dictumst. Sed risus velit, pellentesque eu enim ac, ultricies pretium felis.
</p>
</div>
</li>
</ul>
</li>

<li>Option 2</li>

<li>Option 3</li>
</ul>
</li>
</ul>

但它不支持通过为打开的标题添加“.active”类来支持事件状态。

另请参阅“第 3 项”。当您单击嵌套的“a”时,事件“li”父项内的“a”的“.active”类将被删除。这里的重点是当我点击嵌套的“a”时如何让它们保持事件状态?

那么你能帮我做到这一点吗?

最佳答案

检查以下代码。

Jquery:

 $('.toggle').click(function(e) { e.preventDefault();        
var $this = $(this);
if ($this.next().hasClass('show')) {
$this.next().removeClass('show');
$this.parent().find('.active').removeClass('active')
$this.next().slideUp(350);
} else {
$this.parent().parent().find('.active').removeClass('active');
$this.parent('ul').find('.active').removeClass('active')
$this.parent().parent().find('li .inner').removeClass('show');
$this.parent().parent().find('li .inner').slideUp(350);
$this.toggleClass('active');
$this.next().toggleClass('show');
$this.next().slideToggle(350);
}
});

CSS

.active{
background-color :blue !important;
}

它正在标记中添加事件类:

<a class="toggle active" href="javascript:void(0);">Item 1</a>

关于javascript - 如何为 "nested" Accordion 添加事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39182551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com