gpt4 book ai didi

javascript - 展开全部/折叠所有类(class)列表不工作

转载 作者:行者123 更新时间:2023-11-28 02:38:56 25 4
gpt4 key购买 nike

我有一个树列表,用户可以在其中通过单击打开或关闭分支。树有许多级别和子级别。当用户单击“全部折叠”或“全部展开”按钮时,我希望能够折叠所有分支(下至第一级)或展开“my-clickable”类的所有分支。

我可以让各个分支机构关闭或打开。但我无法让它们全部同时打开或关闭。

这是我的 jsfiddle: https://jsfiddle.net/dyrh325f/65/

需要注意的是,在填充整个树的 ajax 调用之后使用“全部展开”按钮。我在 ajax 调用的“完成”部分中有“全部展开”代码,因此它适用于生成的 html。

我希望用户在关闭一个或多个节点后能够展开整棵树。我已经尝试了 jsFiddle 中的几种变体。似乎没有任何效果。我做错了什么?

我是一个 jQuery 新手所以 - 感谢所有帮助!!!

代码:HTML: 伸展树(Splay Tree)

<font face="calibri" size="3pt" >
<ul id="tree1" class="mytree">
<li id="theJob" class="my-clickable mytree liParOpen">My Job</li>
<ul id="treeList" class="mytree" name="treeList">
<li id='0' class='mytree child-click'>Batcher</li>
<li id='1' class='mytree child-click'>Retriever</li>
<li id='2' class='my-clickable mytree liParOpen'> TASK 2</li>
<ul class='mytree'>
<li id='2a' class='mytree child-click'>Prep1</li>
<li id='2b' class='mytree child-click'>Prep2</li>
<li id='2c' class='mytree my-clickable liParOpen'>PREP3</li>
<ul class='mytree'>
<li id='2b1' class='mytree child-click'>PREP3a</li>
<li id='2b2' class='mytree child-click'>PREP3b</li>
</ul>
</ul>
<li id='3' class='mytree child-click' > task 3</li>
<li id='4' class='my-clickable mytree liParOpen'> TASK 4</li>
<ul class='mytree'>
<li id='4a' class='mytree child-click'>Edit1</li>
<li id='4b' class='mytree child-click'>Edit2</li>
</ul>
<li id='5' class='my-clickable mytree liParOpen'> TASK 5</li>
<ul class='mytree'>
<li id='5a' class='mytree my-clickable liParOpen'>Del1</li>
<ul class='mytree'>
<li id='5a1' class='mytree child-click'>Del1a</li>
<li id='5a2' class='mytree child-click'>Del1b</li>
</ul>
<li id='5b' class='mytree child-click'>Del2</li>
</ul>
<li id='6' class='mytree child-click'>DocEjector-3</li>
</ul>
</ul>
</font>

J查询:

$(document).ready(function(){

// expand button
$('#expandTree').on('click', function(event) {
var all = $('.my-clickable');
var closed = all.filter('.liParClosed');

closed.find("ul").each(function(){
$(this).next('ul').attr("class", "liParOpen");
$(this).nextAll('ul').toggle();
});
}); // end expand button

// collapse button
$('#collapseTree').on('click', function(event) {
var all = $('.my-clickable');
var open = all.filter('.liParOpen');

open.find("ul").each(function(){
$(this).next("ul").attr("class", "liParClosed");
$(this).nextAll('ul').slideToggle();
});
}); // end collapse button

// this is the top most level parents
$(".my-clickable").on('click', function(event) {

var taskId=$(this).closest("li").attr('id');
var tsk = '#'.concat(taskId);

if (taskId != "theJob") {
if ($(tsk).next('ul').length <= 0) {
$(tsk).toggleClass("liParOpen liParClosed");
$(tsk).next('ul').slideToggle();
}
else {
//$(event.target).find('ul').toggle();
$(tsk).toggleClass("liParOpen liParClosed");
$(tsk).children('li').slideToggle();
$(tsk).next('ul').slideToggle();
}
} // end if taskId != "theJob"
else {
$(tsk).toggleClass("liParOpen liParClosed");
$(tsk).slideToggle();
}

event.cancelBubble=true;
event.stopPropagation();
});

//2nd level parents
$(".my-clickable").on('click', ".my-clickable", function(event) {
var taskId=$(this).closest("li").attr('id');
var tsk = '#'.concat(taskId);

//$(event.target).find('ul').slideToggle();
$(tsk).toggleClass("liParOpen liParClosed");

//event.cancelBubble=true;
event.stopPropagation();
});


// first level child w/no children (parent=job)
$(".child-click").on('click', function(event) {
event.stopPropagation();
});

});

CSS:

ul.mytree  li.liParClosed { 
background-color: green;
fontWeight: normal;
}
ul.mytree li.liParOpen {
background-color: cyan;
fontWeight: normal;
}
.selected{
border: 3px solid yellow;
background-color: yellow;
fontWeight: bold;
}
ul.mytree liParOpen selected{
border: 3px solid red;
background-color: yellow;
fontWeight: bold;
}
ul.mytree li selected{
border: 3px solid red;
background-color: yellow;
fontWeight: bold;
}
ul.mytree li {
background-color: white;
fontWeight: normal;
}
ul.mytree {
background-color: white;
fontWeight: normal;
}

最佳答案

您几乎明白了,但是“liParClosed”和“liParOpen”类的切换没有正确完成。

这是解决该问题的 fiddle :

JS Fiddle

相关代码改动:

      // expand button
$('#expandTree').on('click', function(event) {
var all = $('.my-clickable');
var closed = all.filter('.liParClosed');

closed.each(function(){
$(this).removeClass('liParClosed').addClass('liParOpen');
$(this).next('ul').slideToggle();
});
}); // end expand button

// collapse button
$('#collapseTree').on('click', function(event) {
var all = $('.my-clickable');
var open = all.filter('.liParOpen');

open.each(function(){
$(this).removeClass('liParOpen').addClass('liParClosed');
$(this).next('ul').slideToggle();
});
}); // end collapse button

Look at the way the classes are being added/removed. Also, you were looking for open.find("ul") BUT open itself had to be looped through as it is a list of open li's.

希望这对您有所帮助。 :)

关于javascript - 展开全部/折叠所有类(class)列表不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47273308/

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