JQuery 递归切换子项
JQuery toggle children recursively
我不是 JQuery 方面的专家,所以就在这里。我有一个看起来像这样的 HTML:
<ul class="first-class">
<li class="second-class">
<a href="#_">
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">
<i class="fa fa-plus"></i>
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="second-class">
<a href="#_">
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">
<i class="fa fa-plus"></i>
</a>
</li>
</ul>
</li>
</ul>
所以我想做的是,当我按 + 号 (fa fa-plus) 切换其子目录时。此时,当我按 + 号时,所有子目录都被切换。
我怎样才能重写这个 jquery 代码来实现这个目标?
如果我按第一个 + 号,则应打开下一个,并且只有下一个子目录。然后当我按下子目录时,下一个子目录应该打开等等。这也适用于结束部分。
JQUERY 目前我有这个:
$(document).ready(function(){
$(".first-class .second-class").click(function(e){
$(".subdirectory-class", this).first().slideToggle("fast");
$(this).children("a").toggleClass("closed open");
e.preventDefault();
});
});
这会隐藏每个 ul 接受主目录(使用 css display:none),当我按下它时,它会切换所有子目录。
如有任何帮助,我们将不胜感激。
提前致谢
如果您将 e.stopImmediatePropagation()
添加到您的代码中,它将 运行 如您所愿。
$(document).ready(function() {
$(".second-class").click(function(e) {
$(this).find(".subdirectory-class").first().slideToggle("fast");
$(this).children("a").toggleClass("closed open");
e.stopImmediatePropagation()
});
});
演示
$(document).ready(function() {
$(".second-class").click(function(e) {
$(this).find(".subdirectory-class").first().slideToggle("fast");
$(this).children("a").toggleClass("closed open");
e.stopImmediatePropagation()
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="first-class">
<li class="second-class">
<a href="#_">1
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">11
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">111
<i class="fa fa-plus"></i>
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="second-class">
<a href="#_">2
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">22
<i class="fa fa-plus"></i>
</a>
</li>
</ul>
</li>
</ul>
我不是 JQuery 方面的专家,所以就在这里。我有一个看起来像这样的 HTML:
<ul class="first-class">
<li class="second-class">
<a href="#_">
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">
<i class="fa fa-plus"></i>
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="second-class">
<a href="#_">
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">
<i class="fa fa-plus"></i>
</a>
</li>
</ul>
</li>
</ul>
所以我想做的是,当我按 + 号 (fa fa-plus) 切换其子目录时。此时,当我按 + 号时,所有子目录都被切换。 我怎样才能重写这个 jquery 代码来实现这个目标?
如果我按第一个 + 号,则应打开下一个,并且只有下一个子目录。然后当我按下子目录时,下一个子目录应该打开等等。这也适用于结束部分。
JQUERY 目前我有这个:
$(document).ready(function(){
$(".first-class .second-class").click(function(e){
$(".subdirectory-class", this).first().slideToggle("fast");
$(this).children("a").toggleClass("closed open");
e.preventDefault();
});
});
这会隐藏每个 ul 接受主目录(使用 css display:none),当我按下它时,它会切换所有子目录。
如有任何帮助,我们将不胜感激。
提前致谢
如果您将 e.stopImmediatePropagation()
添加到您的代码中,它将 运行 如您所愿。
$(document).ready(function() {
$(".second-class").click(function(e) {
$(this).find(".subdirectory-class").first().slideToggle("fast");
$(this).children("a").toggleClass("closed open");
e.stopImmediatePropagation()
});
});
演示
$(document).ready(function() {
$(".second-class").click(function(e) {
$(this).find(".subdirectory-class").first().slideToggle("fast");
$(this).children("a").toggleClass("closed open");
e.stopImmediatePropagation()
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="first-class">
<li class="second-class">
<a href="#_">1
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">11
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">111
<i class="fa fa-plus"></i>
</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="second-class">
<a href="#_">2
<i class="fa fa-plus"></i>
</a>
<ul class="subdirectory-class">
<li class="second-class">
<a href="#_">22
<i class="fa fa-plus"></i>
</a>
</li>
</ul>
</li>
</ul>