gpt4 book ai didi

javascript - 在 TreeView 显示中只保持一个 li 节点打开

转载 作者:行者123 更新时间:2023-11-28 05:26:13 25 4
gpt4 key购买 nike

当我单击一个 li 显示 TreeView 时,我想隐藏其他兄弟 li。只有一个节点应该打开,它的子元素必须展开。检查下面的 fiddle 链接。 网页代码:

  • 第 1 部分
    • 元素 A
      • 子元素 1
      • 子元素 2
      • 子元素 3
    • 元素 B
      • 子元素 1
      • 子元素 2
      • 子元素 3
    • 元素 C
      • 子元素 1
      • 子元素 2
      • 子元素 3
    • 元素 D
      • 子元素 1
      • 子元素 2
      • 子元素 3
    • 元素 E
      • 子元素 1
      • 子元素 2
      • 子元素 3
  •   <li><a href="#">Part 2</a>
    <ul>
    <li><a href="#">Item A</a>
    <ul>
    <li><a href="#">Sub-item 1</a></li>
    <li><a href="#">Sub-item 2</a></li>
    <li><a href="#">Sub-item 3</a></li>
    </ul>
    </li>
    <li><a href="#">Item B</a>
    <ul>
    <li><a href="#">Sub-item 1</a></li>
    <li><a href="#">Sub-item 2</a></li>
    <li><a href="#">Sub-item 3</a></li>
    </ul>
    </li>
    <li><a href="#">Item C</a>
    <ul>
    <li><a href="#">Sub-item 1</a></li>
    <li><a href="#">Sub-item 2</a></li>
    <li><a href="#">Sub-item 3</a></li>
    </ul>
    </li>
    <li><a href="#">Item D</a>
    <ul>
    <li><a href="#">Sub-item 1</a></li>
    <li><a href="#">Sub-item 2</a></li>
    <li><a href="#">Sub-item 3</a></li>
    </ul>
    </li>
    <li><a href="#">Item E</a>
    <ul>
    <li><a href="#">Sub-item 1</a></li>
    <li><a href="#">Sub-item 2</a></li>
    <li><a href="#">Sub-item 3</a></li>
    </ul>
    </li>
    </ul>
    </li>

    <li><a href="#">Part 3</a>
    <ul>
    <li><a href="#">Item A</a>
    <ul>
    <li><a href="#">Sub-item 1</a></li>
    <li><a href="#">Sub-item 2</a></li>
    <li><a href="#">Sub-item 3</a></li>
    </ul>
    </li>
    <li><a href="#">Item B</a>
    <ul>
    <li><a href="#">Sub-item 1</a></li>
    <li><a href="#">Sub-item 2</a></li>
    <li><a href="#">Sub-item 3</a></li>
    </ul>
    </li>
    <li><a href="#">Item C</a>
    <ul>
    <li><a href="#">Sub-item 1</a></li>
    <li><a href="#">Sub-item 2</a></li>
    <li><a href="#">Sub-item 3</a></li>
    </ul>
    </li>
    <li><a href="#">Item D</a>
    <ul>
    <li><a href="#">Sub-item 1</a></li>
    <li><a href="#">Sub-item 2</a></li>
    <li><a href="#">Sub-item 3</a></li>
    </ul>
    </li>
    <li><a href="#">Item E</a>
    <ul>
    <li><a href="#">Sub-item 1</a></li>
    <li><a href="#">Sub-item 2</a></li>
    <li><a href="#">Sub-item 3</a></li>
    </ul>
    </li>
    </ul>
    </li>
    </ul>

    css :
    ul.tree li {
    list-style-type: none;
    position: relative;
    }

    ul.tree li ul {
    display: none;
    }

    ul.tree li.open > ul {
    display: block;
    }

    ul.tree li a {
    color: black;
    text-decoration: none;
    }

    ul.tree li a:before {
    height: 1em;
    padding:0 .1em;
    font-size: .8em;
    display: block;
    position: absolute;
    left: -1.3em;
    top: .2em;
    }

    ul.tree li > a:not(:last-child):before {
    content: '+';
    }

    ul.tree li.open > a:not(:last-child):before {
    content: '-';
    }

    js code :

    var tree = document.querySelectorAll('ul.tree a:not(:last-child)');
    for(var i = 0; i < tree.length; i++){
    tree[i].addEventListener('click', function(e) {
    var parent = e.target.parentElement;
    var classList = parent.classList;
    if(classList.contains("open")) {
    classList.remove('open');
    var opensubs = parent.querySelectorAll(':scope .open');
    for(var i = 0; i < opensubs.length; i++){
    opensubs[i].classList.remove('open');
    }
    } else {
    classList.add('open'); // Here only i want that condition to check li is already opened or not//
    }
    });
    }

    For more info : https://jsfiddle.net/te366hu2/2/

    最佳答案

    这应该有效!评论中的所有信息: https://jsfiddle.net/xog7hxLs/

    var tree = document.querySelectorAll('ul.tree a:not(:last-child)');
    for(var i = 0; i < tree.length; i++){
    tree[i].addEventListener('click', function(e) {
    var element = e.target.parentElement; //actually this is just the elem itself
    var parent = element.parentElement //real parent
    var opensubs = parent.querySelectorAll(':scope .open'); //check which are opened on parent
    if(opensubs.length !=0) {
    for(var i = 0; i < opensubs.length; i++){
    opensubs[i].classList.remove('open'); //closing opened previously
    }
    }
    element.classList.add('open'); //opening current

    });
    }

    关于javascript - 在 TreeView 显示中只保持一个 li 节点打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38765843/

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