首页 > 解决方案 > 单击外部元素时隐藏元素?

问题描述

问题 :


设想 :

let lis = document.querySelectorAll('li');

for (let i = 0; i < lis.length; i++) {
    if (lis[i].children.length > 0) {
    lis[i].addEventListener('click', function() {
      lis[i].children[0].style.display = 'block';
    });
  }
  }
 li, ul {
  width: max-content;
 }
ul > li > ul {
  display: none;
}

li {
  cursor: pointer;
}
<body>
<ul>
  <li>list</li>
  <li>list
    <ul>
      <li>list</li>
      <li>list</li>
    </ul>
  </li>
  <li>list
    <ul>
      <li>list</li>
      <li>list</li>
    </ul>
  </li>
</ul>
</body>

标签: javascript

解决方案


使用下面的纯 JavaScript 代码将帮助您。

let lis = document.querySelectorAll('li');

document.getElementById("menuContainer").addEventListener("click", function(event){
  for (let i = 0; i < lis.length; i++) {
  if(lis[i].children[0]){
    lis[i].children[0].style.display = 'none';
    }
  }
  if(event.target.nodeName.toLowerCase() == "li" && event.target.children[0]){
    event.target.children[0].style.display = (event.target.children[0].style.display == 'block')?'none':'block';
  }
});

   
ul > li > ul {
  display: none;
}

li {
  cursor: pointer;
}
<body>
<ul id="menuContainer">
  <li>list</li>
  <li>list
    <ul>
      <li>list</li>
      <li>list</li>
    </ul>
  </li>
  <li>list
    <ul>
      <li>list</li>
      <li>list</li>
    </ul>
  </li>
</ul>
</body>

- 谢谢


推荐阅读