[ JavaScript ] 모듈을 더욱 효율적으로 (this 사용) - 같은 틀을 여러 번 반복해서 사용하기

2024. 5. 21. 11:35· FRONT-END/└ JS

환경 : Visual Studio Code

 

실행결과

[ 주요 코드 ]

 

아래의 코드를 이해하기 위해선 자바스크립트의 DOM 탐색 명령을 알아야 한다. 

 

 - DOM 탐색 명령(위치 찾는 명령)

nextElementSibling
previousElementSibling
parentElement
children (여러 개일 수 있음)

 

    <script type="text/javascript">
        window.onload = function(){
            var editors = document.querySelectorAll(".editor");

            for(var i=0; i<editors.length; i++) {
                editors[i].addEventListener("input", function(){
                    //this == 현재 입력이 발생한 textarea
                    //this를 기준으로 .count를 탐색해야 한다(DOM 탐색)
                    var count = this.nextElementSibling.children[0];
                    console.log(count);
                    count.textContent = this.value.length;
                });
            }
        };
    </script>

      (+) var count = this.nextElementSibling.children[0];

           // 현재 선택된 editor의 div 태그(nextElementSibling) 아래의 첫 번째(children[0]) 태그

 


[ 전체 코드 ]

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Javascript 예제</title>

    <!-- 구글 폰트 -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100..900&display=swap" rel="stylesheet">
     
    <!-- 내가 구현할 스타일 -->
    <link rel="stylesheet" type="text/css" href="../css/commons.css">
    <link rel="stylesheet" type="text/css" href="../css/test.css">
    
    <!-- font awesome 아이콘 CDN -->
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
    
    <style>

    </style>

    <!-- javascript를 의도적으로 head 자리에 배치해서 가장 먼저 실행되도록 구현 -->
    <script type="text/javascript">
        window.onload = function(){
            var editors = document.querySelectorAll(".editor");

            for(var i=0; i<editors.length; i++) {
                editors[i].addEventListener("input", function(){
                    //this == 현재 입력이 발생한 textarea
                    //this를 기준으로 .count를 탐색해야 한다(DOM 탐색)
                    var count = this.nextElementSibling.children[0];
                    console.log(count);
                    count.textContent = this.value.length;
                });
            }
        };
    </script>
</head>
<body>

    <div class="container w-500">
        <div class="cell center">
            <h1>자기소개서</h1>
        </div>
        <div class="cell">
            <h2>(Q) 질문 테스트 1번</h2>
            <textarea class="tool w-100 editor"></textarea>
            <div class="right"><span class="count">0</span> / 1000</div>
        </div>
        <div class="cell">
            <h2>(Q) 질문 테스트 2번</h2>
            <textarea class="tool w-100 editor"></textarea>
            <div class="right"><span class="count">0</span> / 1000</div>
        </div>
        <div class="cell">
            <h2>(Q) 질문 테스트 3번</h2>
            <textarea class="tool w-100 editor"></textarea>
            <div class="right"><span class="count">0</span> / 1000</div>
        </div>
    </div>

</body>
</html>

 

개인 공부 기록용입니다:)

728x90