繁体   English   中英

HTML折叠/展开树无法按预期工作

[英]HTML collapse/expand tree not working as expected

我想要折叠多层次的类别树。 我从堆栈中尝试了很多答案,但它没有用。 谁能帮帮我吗?

我试过这段代码: https//stackoverflow.com/a/30945775/7727479

实际结果 :

  • 首先显示测试1和测试3
  • 然后,单击测试1 =>单击测试2,应显示测试8
  • 然后,单击测试2 =>单击测试4,应显示测试7
  • 等等。

更新:

在此输入图像描述

片段:

 $(document).ready(function() { var getChild = $('ul.categories').children('li'); getChild.each(function(i, v) { if ($(v).data('parentcategory') == "0") { $(v).addClass('active-collapse'); } }); $('div.categories-list li').click(function() { var main_category = $(this).data('parentcategory'); $('ul.sub', $(this).parent()).eq(0).toggle(); }); }); 
 div.categories-list { width: 30%; margin-bottom: 20px; float: left; } ul.categories, ul.sub { border-top: 1px solid #c3cfd9; margin: 0; padding: 0; } ul.categories li { margin: 0; padding: 0; list-style: none; } ul.categories li a { display: block; max-width: 100%; padding: 10px 5px 10px 10px; font-size: 13px; background: #FCFCFC; color: #3f729b; border: 1px solid #c3cfd9; border-top: 0px !important; text-decoration: none; font-weight: 700; cursor: pointer; transition: all 150ms ease-out; -webkit-transition: all 150ms ease-out; } ul.categories li a:hover { text-indent: 5px; } ul.sub { display: none; } .activeUi { display: block; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="categories-list"> <ul class="categories"> <li class="child active-collapse" data-parentcategory="0" data-id="1"> <a class="li-child-text" style="padding-left:1%">Test 1</a> <ul class="sub" data-parentcategory="0" data-id="1"> <li class="child deactive-collapse" data-parentcategory="1" data-id="2"> <a class="li-child-text" style="padding-left:5%">Test 2</a> <ul class="sub" data-parentcategory="1" data-id="2"> <li class="child deactive-collapse" data-parentcategory="2" data-id="4"><a class="li-child-text" style="padding-left:10%">Test 4</a></li> <li class="single deactive-collapse" data-parentcategory="4" data-id="5"><a class="li-single-text" style="padding-left:20%">Test 5</a></li> <li class="single deactive-collapse" data-parentcategory="4" data-id="6"><a class="li-single-text" style="padding-left:20%">Test 6</a></li> </ul> </li> <li class="single deactive-collapse" data-parentcategory="2" data-id="7"><a class="li-single-text" style="padding-left:10%">Test 7</a></li> </ul> <ul class="sub" data-parentcategory="0" data-id="1"> <li class="child deactive-collapse" data-parentcategory="1" data-id="8"><a class="li-child-text" style="padding-left:5%">Test 8</a></li> <li class="single deactive-collapse" data-parentcategory="8" data-id="9"><a class="li-single-text" style="padding-left:40%">Test 9</a></li> </ul> </li> <li class="single active-collapse" data-parentcategory="0" data-id="3"><a class="li-single-text" style="padding-left:1%">Test 3</a></li> </ul> </div> 

我认为主要的问题在于你的html结构,如果你想创建一个级别,你需要在li级元素中使用anchor创建那个级别的li

例如,要在TEST 1.0中添加TEST 2.2 ,您需要在用于TEST 1.0anchor之后找到下一个ul.sub并添加另一个带有anchor li ,如果要在TEST2.2中创建另一个子菜单, 需要创建ul class sub和另一个li

<li class="single deactive-collapse">
    <a class="li-single-text" style="padding-left:5%">Test 2.2 LAST</a>
    <ul class="sub" >
        <li class="child deactive-collapse">
            <a class="li-child-text" style="padding-left:10%">Test 3.2 LAST</a>
        </li>
    </ul>
</li>

这是片段

 var addById = function (parent, id, name) { $('div.categories-list li').each(function (i, e) { if (parent === $(e).data("id")) { if (!$(e).find("ul.sub").length) { $(e).append('<ul class="sub"></ul>'); } element = '<li class="child deactive-collapse" data-parentcategory="' + parent + '" data-id="' + id + '"><a class="li-child-text" style="padding-left:5%">' + name + '</a></li>'; $(e).find("ul.sub").append($(element)); return true; } }); }; addById(1, 123, 'dynamically'); addById(15, 124, 'dynamically'); $(document).ready(function () { $('div.categories-list li > a').click(function () { var main_category = $(this).data('parentcategory'); $('ul.sub', $(this).parent()).eq(0).toggle(); return false; }); }); 
 div.categories-list { width: 30%; margin-bottom: 20px; float: left; } ul.categories, ul.sub { border-top: 1px solid #c3cfd9; margin: 0; padding: 0; } ul.categories li { margin: 0; padding: 0; list-style: none; } ul.categories li a { display: block; max-width: 100%; padding: 10px 5px 10px 10px; font-size: 13px; background: #FCFCFC; color: #3f729b; border: 1px solid #c3cfd9; border-top: 0px !important; text-decoration: none; font-weight: 700; cursor: pointer; transition: all 150ms ease-out; -webkit-transition: all 150ms ease-out; } ul.categories li a:hover { text-indent: 5px; } ul.sub { display: none; } .activeUi { display: block; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="categories-list"> <ul class="categories"> <li class="child active-collapse" data-parentcategory="0" data-id="1"> <a class="li-child-text" style="padding-left:1%">Test 1.0</a> <ul class="sub"> <li class="child deactive-collapse" data-parentcategory="1" data-id="2"> <a class="li-child-text" style="padding-left:5%">Test 2.0</a> <ul class="sub"> <li class="child deactive-collapse" data-parentcategory="2" data-id="4"> <a class="li-child-text" style="padding-left:10%">Test 3.0 LAST</a> </li> <li class="single deactive-collapse" data-parentcategory="2" data-id="5"> <a class="li-single-text" style="padding-left:10%">Test 3.0 LAST</a> </li> <li class="single deactive-collapse" data-parentcategory="2" data-id="6"> <a class="li-single-text" style="padding-left:10%">Test 3.0 LAST</a> </li> </ul> </li> <li class="single deactive-collapse" data-parentcategory="1" data-id="7"> <a class="li-single-text" style="padding-left:5%">Test 2.1 LAST</a> </li> <li class="child deactive-collapse" data-parentcategory="1" data-id="8"> <a class="li-child-text" style="padding-left:5%">Test 8</a> <ul class="sub" data-parentcategory="8" data-id="9"> <li class="single deactive-collapse" data-parentcategory="8" data-id="9"> <a class="li-single-text" style="padding-left:40%">Test 9</a> </li> </ul> </li> <li class="single deactive-collapse" data-parentcategory="1" data-id="10"> <a class="li-single-text" style="padding-left:5%">Test 2.2 LAST</a> <ul class="sub"> <li class="child deactive-collapse" data-parentcategory="10" data-id="11"> <a class="li-child-text" style="padding-left:10%">Test 3.2 LAST</a> </li> </ul> </li> <!-- PUT EXAMPLE CODE HERE --> </ul> </li> <li class="child active-collapse" data-parentcategory="0" data-id="12"> <a class="li-child-text" style="padding-left:1%">Test 1.1</a> <ul class="sub"> <li class="child deactive-collapse" data-parentcategory="12" data-id="13"><a class="li-child-text" style="padding-left:5%">Test 2.1 LAST</a></li> <li class="single deactive-collapse" data-parentcategory="12" data-id="14"><a class="li-single-text" style="padding-left:5%">Test 2.1 LAST</a></li> </ul> </li> <li class="single active-collapse" data-parentcategory="0" data-id="15"><a class="li-single-text" style="padding-left:1%">Test 1.2 LAST</a></li> </ul> </div> 

是的,你对ul li的结构有一些问题。 请看看我的演示。 您可以根据自己的意愿添加类和属性。 它不会妨碍。

 document.querySelector('.categories').addEventListener('click', (e) => { const el = e.target; const sibling = el.nextSibling.nextSibling; if (el && el.className == 'toggle' && sibling) { sibling.classList.toggle('show'); } }); 
 div.categories-list { width: 50%; margin-bottom: 20px; float: left; } ul.categories, ul.sub { border-top: 1px solid #c3cfd9; margin: 0; padding: 0; } ul.categories li { margin: 0; padding: 0; list-style: none; } ul.categories li a { display: block; max-width: 100%; padding: 10px 5px 10px 10px; font-size: 13px; background: #FCFCFC; color: #3f729b; border: 1px solid #c3cfd9; border-top: 0px !important; text-decoration: none; font-weight: 700; cursor: pointer; transition: all 150ms ease-out; -webkit-transition: all 150ms ease-out; } ul.categories li a:hover { text-indent: 5px; } ul.sub { display: none; } .activeUi { display: block; } ul ul { display: none; } .show { display: block; } 
 <div class="categories-list"> <ul class="categories"> <li > <a href="javascript:;" class="toggle">Test 1</a> <ul> <li> <a href="javascript:;" class="toggle">Test 2</a> <ul> <li> <a href="javascript:;" class="toggle">Test 4</a> <ul> <li> <a href="javascript:;" class="toggle">Test 5</a> </li> <li> <a href="javascript:;" class="toggle">Test 6</a> </li> </ul> </li> <li> <a href="javascript:;" class="toggle">Test 7</a> </li> </ul> </li> <li> <a href="javascript:;" class="toggle">Test 8</a> <ul> <li> <a href="javascript:;" class="toggle">Test 9</a> </li> </ul> </li> </ul> </li> <li> <a href="javascript:;" class="toggle">Test 3</a> </li> </ul> </div> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM