Javascript 目标仅被点击的元素

标签 javascript html jquery css

所以我有一个侧面导航,在某些列表中有一个子菜单,并且我尝试仅在单击时显示子菜单。

这是 HTML

<div class="sidebar">
    <ul class="nav">
        <li class="main-menu" onclick="dispDrop()"><a href="">Item 1</a>
            <ul class="sub-menu">
                <li><a href="">Sub-item 1</a></li>
                <li><a href="">Sub-item 1</a></li>
                <li><a href="">Sub-item 1</a></li>
                <li><a href="">Sub-item 1</a></li>
            </ul>
        </li>
        <li><a href="">Item 2</a></li>
        <li><a href="">Item 3</a></li>
        <li class="main-menu" onclick="dispDrop()"><a href="">Item 4</a>
            <ul class="sub-menu">
                <li><a href="">Sub-item 1</a></li>
                <li><a href="">Sub-item 1</a></li>
                <li><a href="">Sub-item 1</a></li>
                <li><a href="">Sub-item 1</a></li>
            </ul>
        </li>
        <li><a href="">Item 5</a></li>
        <li><a href="">Item 6</a></li>
    </ul>
</div>

这是它的 CSS

.nav ul {
    display: none;
    position: relative;
    padding: 0px;
}
.nav li.active ul {
    display: block;
}

这是 JavaScript

<script type="text/javascript">
    const navItem = document.querySelector('.main-menu');

    function dispDrop() {
        navItem.classList.toggle("active");
    }
</script>

起初它工作正常,但是当我将子菜单添加到另一个列表时,它开始出现故障并且不会显示子菜单。

有没有办法只定位点击的<li>并且仅将类添加/切换到单击的 <li>

最佳答案

您可以做的是将this添加到onclick="dispDrop()"

然后执行以下操作。

function dispDrop(obj) {
  obj.classList.toggle("active");
}

演示

function dispDrop(obj) {
  obj.classList.toggle("active");
}
.nav ul {
  display: none;
  position: relative;
  padding: 0px;
}

.nav li.active ul {
  display: block;
}
<div class="sidebar">
  <ul class="nav">
    <li class="main-menu" onclick="dispDrop(this)"><a href="#">Item 1</a>
      <ul class="sub-menu">
        <li><a href="">Sub-item 1</a></li>
        <li><a href="">Sub-item 1</a></li>
        <li><a href="">Sub-item 1</a></li>
        <li><a href="">Sub-item 1</a></li>
      </ul>
    </li>
    <li><a href="">Item 2</a></li>
    <li><a href="">Item 3</a></li>
    <li class="main-menu" onclick="dispDrop(this)"><a href="#">Item 4</a>
      <ul class="sub-menu">
        <li><a href="">Sub-item 1</a></li>
        <li><a href="">Sub-item 1</a></li>
        <li><a href="">Sub-item 1</a></li>
        <li><a href="">Sub-item 1</a></li>
      </ul>
    </li>
    <li><a href="">Item 5</a></li>
    <li><a href="">Item 6</a></li>
  </ul>
</div>

关于Javascript 目标仅被点击的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71598062/

相关文章:

javascript - 如何在servicenow中从javascript访问果冻变量

javascript - 滚动到顶部动画不流畅

javascript - figcaption 的不透明度正在神秘地变化

javascript禁用/启用复选框

javascript - 如何折叠一个段落并将其余内容替换为 '...' ?

javascript - 如何将数字转换为字母形式,例如。 3 到 3,然后 className = 3?

javascript - Vue.js CLI 中的多个页面

javascript - 计算 AngularJS 中子元素的数量

javascript - Jquery slideDown() 无法正常工作

html - 为什么 Flex-box 高度为 :100% works in all browsers except Firefox?