【问题标题】:How the next sibling works?下一个兄弟姐妹如何工作?
【发布时间】:2016-11-16 05:53:33
【问题描述】:

我是 js 新手,这是我第一次使用 nextSibling 选择器,我正在尝试实现一个下拉菜单。在下面的代码中,我需要在单击菜单项时显示子菜单。我怎样才能解决这个问题?

var k=document.getElementsByClassName("menu-title");
for(i=0;i < k.length ;i++)
  {
    k[i].addEventListener("click",function(){
      //alert("hai");
      this.nextSibling.style.display = "block";
    });
  }
html,body {
  width:100%;
  height:100%;
}

navbar{
  width:100%;
  height:50%;
  background-color:green;
  float:left;
}

main{
  float:left;
  width:100%;
  height:50%;
  background-color:yellow;
  
}
.nav-sec-level{
  color:white;
  background-color:aqua;
  display:none;
  }
.menu-title{
  cursor : pointer;
  }
  
  
<navbar>
  <ul>
    <li class="menu-title">Fruits
      <ol class="nav-sec-level">
        <li>Mango</li>
        <li>Apple</li>
      </ol>
    </li>
    <li class="menu-title">Birds
      <ol class="nav-sec-level">
        <li>Kiwi</li>
        <li>Dove</li>
      </ol>
    </li>
    <li class="menu-title">Birds
      <ol class="nav-sec-level">
        <li>Kiwi</li>
        <li>Dove</li>
      </ol>
    </li>
    <li class="menu-title">Birds
      <ol class="nav-sec-level">
        <li>Kiwi</li>
        <li>Dove</li>
      </ol>
    </li>
    <li>Birds
      <ol class="nav-sec-level">
        <li>Kiwi</li>
        <li>Dove</li>
      </ol>
    </li>
    <li>Birds
      <ol class="nav-sec-level">
        <li>Kiwi</li>
        <li>Dove</li>
      </ol>
    </li>
    <li>Birds
      <ol class="nav-sec-level">
        <li>Kiwi</li>
        <li>Dove</li>
      </ol>
    </li>
    <li>Birds
      <ol class="nav-sec-level">
        <li>Kiwi</li>
        <li>Dove</li>
      </ol>
    </li>
    <li>Birds
      <ol class="nav-sec-level">
        <li>Kiwi</li>
        <li>Dove</li>
      </ol>
    </li>
    <li>Birds
      <ol class="nav-sec-level">
        <li>Kiwi</li>
        <li>Dove</li>
      </ol>
    </li>
    <li>Colours
      <ol class="nav-sec-level">
        <li>Red</li>
        <li>Green</li>
      </ol>
    </li>
  </ul>
</navbar>
<main>
</main>

【问题讨论】:

    标签: javascript html nextsibling


    【解决方案1】:

    您正在寻找的不是nextSibling,因为它会为您提供同一级别的下一个节点。您应该在其中搜索 nav-sec-level 并切换可见。

    示例

    var k = document.querySelectorAll(".menu-title");
    for (i = 0; i < k.length; i++) {
      k[i].addEventListener("click", function() {
        var subMenu = this.querySelector('.nav-sec-level');
        if(subMenu.style.display === 'block')
          subMenu.style.display = 'none';
        else
          subMenu.style.display = 'block'
      });
    }
    html,
    body {
      width: 100%;
      height: 100%;
    }
    navbar {
      width: 100%;
      height: 50%;
      background-color: green;
      float: left;
    }
    main {
      float: left;
      width: 100%;
      height: 50%;
      background-color: yellow;
    }
    .nav-sec-level {
      color: white;
      background-color: aqua;
      display: none;
    }
    .menu-title {
      cursor: pointer;
    }
    <navbar>
      <ul>
        <li class="menu-title">Fruits
          <ol class="nav-sec-level">
            <li>Mango</li>
            <li>Apple</li>
          </ol>
        </li>
        <li class="menu-title">Birds
          <ol class="nav-sec-level">
            <li>Kiwi</li>
            <li>Dove</li>
          </ol>
        </li>
        <li class="menu-title">Birds
          <ol class="nav-sec-level">
            <li>Kiwi</li>
            <li>Dove</li>
          </ol>
        </li>
        <li class="menu-title">Birds
          <ol class="nav-sec-level">
            <li>Kiwi</li>
            <li>Dove</li>
          </ol>
        </li>
        <li>Birds
          <ol class="nav-sec-level">
            <li>Kiwi</li>
            <li>Dove</li>
          </ol>
        </li>
        <li>Birds
          <ol class="nav-sec-level">
            <li>Kiwi</li>
            <li>Dove</li>
          </ol>
        </li>
        <li>Birds
          <ol class="nav-sec-level">
            <li>Kiwi</li>
            <li>Dove</li>
          </ol>
        </li>
        <li>Birds
          <ol class="nav-sec-level">
            <li>Kiwi</li>
            <li>Dove</li>
          </ol>
        </li>
        <li>Birds
          <ol class="nav-sec-level">
            <li>Kiwi</li>
            <li>Dove</li>
          </ol>
        </li>
        <li>Birds
          <ol class="nav-sec-level">
            <li>Kiwi</li>
            <li>Dove</li>
          </ol>
        </li>
        <li>Colours
          <ol class="nav-sec-level">
            <li>Red</li>
            <li>Green</li>
          </ol>
        </li>
      </ul>
    </navbar>
    <main>
    </main>

    【讨论】:

    • 好的,那么我如何获得下一个 元素是否有像 nextSibling 这样的选择器?
    • 这不是您要找的吗?
    • 为此,您应该使用nestSibling。您可以参考以下帖子:stackoverflow.com/questions/842336/…
    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2019-05-06
    • 2019-08-29
    相关资源
    最近更新 更多