부모를 클릭 할 때 메뉴에서 자식 표시 / 숨기기 (순수 자바 스크립트 사용)

Shtarley

JavaScript에 대한 기본적인 지식이 있으며 다음과 같은 메뉴를 만들려고합니다.

  • 첫 번째 수준 부모 만 표시됩니다.
  • 그런 다음 클릭하면 자녀가 표시됩니다.
  • 다시 클릭하면 (또는 페이지의 아무 곳이나 클릭하면) 닫힙니다.
  • 2 단계 아동 (예 : 아동의 아동)을 위해 일해야합니다.

이것이 제가 지금까지 가지고있는 것이고, 이것이 옳지 않다는 것을 알고 있습니다. 온라인에서 많은 jQuery 솔루션을 찾았지만 순수한 JavaScript 및 CSS를 원합니다.

참고 : WordPress 메뉴 구조에서 이것을 사용할 수 있기를 원하므로 사용되는 클래스 및 ID의 수를 최소로 유지해야합니다. 그러나 자식이있는 각 부모에 수동으로 "부모"클래스를 추가해야한다면 괜찮습니다.

내 자바 스크립트 :

var menuParents = document.querySelectorAll("#my-menu .parent");
menuParents.forEach(menuParent => {
   document.querySelector("#my-menu .parent").addEventListener("click", ToggleMenu);
      function ToggleMenu() {
         document.querySelector("#my-menu .parent ul").style.display = 'block';
      }
});

내 CSS :

#my-menu .parent ul {display: none;}

그리고 마지막으로 내 HTML :

<ul id="my-menu">
   <li>Standard Item</li>
   <li>Standard Item</li>
   <li class="parent">Item with children
      <ul>
         <li>child item</li>
         <li>child item</li>
         <li class="parent">child item with children
           <li>second level child</li>
           <li>second level child</li>
         </li>
         <li>child item</li>
         <li>child item</li>
      </ul>
   </li>
   <li>Standard Item</li>
   <li>Standard Item</li>
   <li class="parent">Item with children
      <ul>
        <li>child item</li>
        <li>child item</li>
        <li class="parent">child item with children
           <li>second level child</li>
           <li>second level child</li>
        </li>
        <li>child item</li>
        <li>child item</li>
      </ul>
   </li>
   <li>Standard Item</li>
   <li>Standard Item</li>
</ul>
데이브

에서 특정 요소를 사용한 다음 해당 요소를 forEach가져 와서 스타일을 firstElementChild전환해야 display합니다.

const toggle = {
    block: 'none',
    none: 'block'
}

function ToggleMenu(event) {
    event.stopPropagation();
    event.target.classList.toggle('active');
    event.target.firstElementChild.style.display = toggle[event.target.firstElementChild.style.display] || 'block';
}
var menuParents = document.querySelectorAll("#my-menu .parent");
menuParents.forEach(menuParent => {
    menuParent.addEventListener("click", ToggleMenu);
})
#my-menu .parent ul {display: none;}
.active {
    color: red
}

.active > * {
    color: black
}
<ul id="my-menu">
    <li>Standard Item</li>
    <li>Standard Item</li>
    <li class="parent">Item with children
        <ul>
            <li>child item</li>
            <li>child item</li>
            <li class="parent">child item with children
              <ul>
                <li>second level child</li>
                <li>second level child</li>
              </ul>
            </li>
            <li>child item</li>
            <li>child item</li>
        </ul>
    </li>
    <li>Standard Item</li>
    <li>Standard Item</li>
    <li class="parent">Item with children
        <ul>
            <li>child item</li>
            <li>child item</li>
            <li class="parent">child item with children
              <ul>
                <li>second level child</li>
                <li>second level child</li>
              </ul>
            </li>
            <li>child item</li>
            <li>child item</li>
        </ul>
    </li>
    <li>Standard Item</li>
    <li>Standard Item</li>
</ul>

또는 "부모"클래스없이

const toggle = {
    block: 'none',
    none: 'block'
}

function ToggleMenu(event) {
    event.stopPropagation();
    event.target.classList.toggle('active');
    event.target.firstElementChild.style.display = toggle[event.target.firstElementChild.style.display] || 'block';
}
var menuParents = document.querySelectorAll("#my-menu li > ul");
menuParents.forEach(menuParent => {
    menuParent.parentElement.addEventListener("click", ToggleMenu);
})
#my-menu li > ul {display: none;}
.active {
    color: red
}

.active > * {
    color: black
}
<ul id="my-menu">
    <li>Standard Item</li>
    <li>Standard Item</li>
    <li>Item with children
        <ul>
            <li>child item</li>
            <li>child item</li>
            <li>child item with children
              <ul>
                <li>second level child</li>
                <li>second level child</li>
              </ul>
            </li>
            <li>child item</li>
            <li>child item</li>
        </ul>
    </li>
    <li>Standard Item</li>
    <li>Standard Item</li>
    <li>Item with children
        <ul>
            <li>child item</li>
            <li>child item</li>
            <li>child item with children
              <ul>
                <li>second level child</li>
                <li>second level child</li>
              </ul>
            </li>
            <li>child item</li>
            <li>child item</li>
        </ul>
    </li>
    <li>Standard Item</li>
    <li>Standard Item</li>
</ul>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

외부 클릭시 자바 스크립트 숨기기 메뉴

분류에서Dev

사용자가 배치 스크립트에서 닫기 버튼을 클릭 할 때 메시지를 표시 할 수 있습니까?

분류에서Dev

Ember.js 1.0.0 : 사용자가보기를 클릭 할 때 "부동"메뉴보기 숨기기

분류에서Dev

버튼 클릭 자바 스크립트를 사용하여 하위 div가있는 div 표시 / 숨기기

분류에서Dev

<div> 콘텐츠를 표시하거나 숨기려면 웹 페이지에서 <a> 태그를 클릭 할 때 자바 스크립트 함수를 호출해야합니다.

분류에서Dev

PHP 변수의 자바 스크립트 (클릭시 숨기기)

분류에서Dev

CSS-사용자가 제목을 클릭 할 때 단순 탐색 축소 표시 / 숨기기

분류에서Dev

자바 스크립트를 사용하여 버튼을 클릭 할 때 ul에 여러 div의 p 태그 내용을 표시하는 방법

분류에서Dev

클릭 자바 스크립트에 대한 입력 숨기기 및 표시

분류에서Dev

자바 스크립트로 다른 이미지를 클릭 할 때 li의 요소 숨기기

분류에서Dev

사용자가 인턴 href를 클릭 할 때 <p> 숨기기

분류에서Dev

사용자가 텍스트 상자 내부를 클릭 할 때 테이블 행 숨기기

분류에서Dev

사용자가 옵션을 클릭 할 때 하위 메뉴를 숨기지 만 사용자가 메뉴 위로 마우스를 가져 가면 계속 표시되는 방법

분류에서Dev

자바 스크립트 날짜를 사용할 때 Safari에서 NAN 받기

분류에서Dev

트립 어드바이저 사용자 프로필에서 리뷰를 스크랩 할 때 "더보기"버튼을 클릭합니다.

분류에서Dev

NEW 메뉴를 클릭 한 후 바로 선택할 수있는 사용자 지정 프로젝트 표시

분류에서Dev

사용자가 독립 div를 클릭 할 때 캔버스 요소 숨기기 (PaperJS 사용)

분류에서Dev

순수한 자바 스크립트 외부를 클릭하면 사이드 메뉴 제거

분류에서Dev

PHP 파일에서 자바 스크립트를 구현할 때 표시 / 숨기기 기능이 작동하지 않음

분류에서Dev

순수 자바 스크립트를 사용하여 괄호 안에 콘텐츠 숨기기

분류에서Dev

순수 자바 스크립트를 사용하여 괄호 안에 콘텐츠 숨기기

분류에서Dev

순수 CSS 숨김 / 표시 div, div를 클릭 할 때 숨기지 않음

분류에서Dev

링크를 클릭 할 때 자바 스크립트 기능이 인식되지 않음

분류에서Dev

사용자가 ShieldUI로 ChartLegend를 클릭 할 때 차트를 숨기거나 표시하는 기능을 비활성화하는 방법은 무엇입니까?

분류에서Dev

버튼 클릭으로 서식을 표시하거나 숨기는 자바 스크립트

분류에서Dev

로그인하기 전에 입력 상자를 사용하여 스크립트를 실행하여 메뉴 상자를 표시 할 수 있습니까?

분류에서Dev

자바 스크립트 외부를 클릭 할 때 모달을 닫는 방법

분류에서Dev

자바 스크립트를 사용하여 <section> 요소 표시 / 숨기기

분류에서Dev

HTML <DIV> 자바 스크립트를 사용하여 숨기기 / 표시

Related 관련 기사

  1. 1

    외부 클릭시 자바 스크립트 숨기기 메뉴

  2. 2

    사용자가 배치 스크립트에서 닫기 버튼을 클릭 할 때 메시지를 표시 할 수 있습니까?

  3. 3

    Ember.js 1.0.0 : 사용자가보기를 클릭 할 때 "부동"메뉴보기 숨기기

  4. 4

    버튼 클릭 자바 스크립트를 사용하여 하위 div가있는 div 표시 / 숨기기

  5. 5

    <div> 콘텐츠를 표시하거나 숨기려면 웹 페이지에서 <a> 태그를 클릭 할 때 자바 스크립트 함수를 호출해야합니다.

  6. 6

    PHP 변수의 자바 스크립트 (클릭시 숨기기)

  7. 7

    CSS-사용자가 제목을 클릭 할 때 단순 탐색 축소 표시 / 숨기기

  8. 8

    자바 스크립트를 사용하여 버튼을 클릭 할 때 ul에 여러 div의 p 태그 내용을 표시하는 방법

  9. 9

    클릭 자바 스크립트에 대한 입력 숨기기 및 표시

  10. 10

    자바 스크립트로 다른 이미지를 클릭 할 때 li의 요소 숨기기

  11. 11

    사용자가 인턴 href를 클릭 할 때 <p> 숨기기

  12. 12

    사용자가 텍스트 상자 내부를 클릭 할 때 테이블 행 숨기기

  13. 13

    사용자가 옵션을 클릭 할 때 하위 메뉴를 숨기지 만 사용자가 메뉴 위로 마우스를 가져 가면 계속 표시되는 방법

  14. 14

    자바 스크립트 날짜를 사용할 때 Safari에서 NAN 받기

  15. 15

    트립 어드바이저 사용자 프로필에서 리뷰를 스크랩 할 때 "더보기"버튼을 클릭합니다.

  16. 16

    NEW 메뉴를 클릭 한 후 바로 선택할 수있는 사용자 지정 프로젝트 표시

  17. 17

    사용자가 독립 div를 클릭 할 때 캔버스 요소 숨기기 (PaperJS 사용)

  18. 18

    순수한 자바 스크립트 외부를 클릭하면 사이드 메뉴 제거

  19. 19

    PHP 파일에서 자바 스크립트를 구현할 때 표시 / 숨기기 기능이 작동하지 않음

  20. 20

    순수 자바 스크립트를 사용하여 괄호 안에 콘텐츠 숨기기

  21. 21

    순수 자바 스크립트를 사용하여 괄호 안에 콘텐츠 숨기기

  22. 22

    순수 CSS 숨김 / 표시 div, div를 클릭 할 때 숨기지 않음

  23. 23

    링크를 클릭 할 때 자바 스크립트 기능이 인식되지 않음

  24. 24

    사용자가 ShieldUI로 ChartLegend를 클릭 할 때 차트를 숨기거나 표시하는 기능을 비활성화하는 방법은 무엇입니까?

  25. 25

    버튼 클릭으로 서식을 표시하거나 숨기는 자바 스크립트

  26. 26

    로그인하기 전에 입력 상자를 사용하여 스크립트를 실행하여 메뉴 상자를 표시 할 수 있습니까?

  27. 27

    자바 스크립트 외부를 클릭 할 때 모달을 닫는 방법

  28. 28

    자바 스크립트를 사용하여 <section> 요소 표시 / 숨기기

  29. 29

    HTML <DIV> 자바 스크립트를 사용하여 숨기기 / 표시

뜨겁다태그

보관