1.  문서 객체 모델 DOM  Document Object Model

👩🏻‍💻  문서 객체를 조합해서 만든 전체적인 형태를 말함

👩🏻‍💻  자바 스크립트를 사용하는 목적은 html을 다루는 것
        ▶️  자바 스크립트에서는 html 요소를 문서 객체 document object를 이용해 조작을 함

👩🏻‍💻  HTML 페이지는 코드를 위에서 아래로 차례대로 실행

        ➡️  body 태그 생성되기 이전인 head 태그에서 body 태그에 무언가 출력하려면 문제 발생

       ➡️  기본적으로 head 태그 내부에 script 태그를 배치하면 body 태그에 있는 문서 객체(요소)에 접근 불가

<head>    
    <script>
        const h1 = (text) => `<h1>${text}</h1>`;
    </script>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            document.body.innerHTML += h1('1번째 script 태그');
        });
    </script>
</head>
<body>

    <h1>1번째 h1 태그</h1>
    <script>
        document.body.innerHTML += h1('3번째 script 태그');
    </script>
    <h1>2번째 h1 태그</h1>

</body>

 


 

(1)  DOMContentLoaded 이벤트

💡  DOMContentLoaded 이벤트는 웹 브라우저가 문서 객체를 모두 읽고 나서 실행       
       ▶️  script 태그가 body 태그 이전에 위치해도 문제없이 코드 실행
<script>
    // DOMContentLoaded를 연결. DOMContentLoaded 상태가 되었을 때 콜백 함수를 호출
    document.addEventListener('DOMContentLoaded', () => {
        const h1 = (text) => `<h1>${text}</h1>`;
        document.body.innerHTML += h1('DocumentLoaded 이벤트 발생');
    });
</script>

📌  DOMContentLoaded 사용한 배경색 변경 예제
<head>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const changeBtn = document.querySelector('#changeBtn');
            const resetBtn = document.querySelector('#resetBtn');

            let i = 0;

            const bodyTag = document.querySelector('body');
            const color = ['red', 'orange', 'yellow', 'blue'];
            const handleColor = () => {
                bodyTag.style.backgroundColor = color[i++ % color.length];
            }

            changeBtn.addEventListener('click', handleColor);
            resetBtn.addEventListener('click', () => {
                changeBtn.removeEventListener('click', handleColor);
                bodyTag.style.backgroundColor = '';
            })
        })
    </script>
</head>
<body>
    <button id="changeBtn">배경색 변경</button>
    <button id="resetBtn">배경색 초기화</button>
</body>

 


 

💡  addEventListener('이벤트', '콜백함수') 메소드
     -  document라는 문서 객체의 이벤트가 발생했을 때, 매개변수로 지정한 콜백 함수를 실행하라는 의미

 


(2) 문서 객체 가져오기

document.head / document.body / document.title

        
    👩🏻‍💻  head와 body 요소 내부에 다른 요소들은 다음과 같은 별도의 메소드를 사용해서 접근
         ⚡️  document.querySelector(선택자) : 요소를 하나만 추출
         ⚡️  document.querySelectorAll(선택자) : 선택자에 해당하는 모든 문서 객체를 배열로 가져옴
     👩🏻‍💻  선택자 부분에는 CSS 선택자를 입력

이름 선택자 형태 설명
태그 선택자 태그 특정 태그를 가진 요소를 추출
아이디 선택자 #아이디 특정 id 속성을 가진 요소를 추출
클래스 선택자 .클래스 특정 class 속성을 가진 요소를 추출
속성 선택자 [속성=값] 특정 속성 값을 갖고 있는 요소 추출
후손 선택자 선택자_A 선택자_B 선택자_A 아래에 있는 선택자_B 선택

 

<head>
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            const header = document.querySelector('h1'); // 요소를 읽어들임. 제일 먼저 나오는 요소 하나만 가져옴.
            // 텍스트와 스타일을 변경.
            header.textContent = 'HEADERS';
            header.style.color = 'white';
            header.style.backgroundColor = 'black';
            header.style.padding = '10px';

            const headersAll = document.querySelectorAll('h2'); // 요소를 읽어들임.
            console.log(headersAll)
            headersAll.forEach((item) => { // 일반적으로 forEach() 메소드를 사용해서 반복을 돌림.
                item.textContent = 'headersAll';
                item.style.color = 'red';
                item.style.backgroundColor = 'black';
                item.style.padding = '20px';
            })

            // 1. for문을 사용해서 글자색을 빨강으로 변경
            for(let idx = 0; idx < headersAll.length; idx++) {
                headersAll[idx].style.color = 'red';
            }

            // 2. for in 문을 사용해서 글자색을 파랑으로 변경
            for(let idx in [...headersAll]) {
                headersAll[idx].style.color = 'blue';
            }

            // 3. for of 문을 사용해서 글자색을 주황으로 변경
            for(const i of headersAll) {
                i.style.color = 'orange';
            }

        })
    </script>
</head>
<body>
    <h1></h1>
    <h1>2</h1>
    <h2></h2>
    <h2></h2>
    <h2></h2>
    <h2></h2>
</body>

 

 

 

 

[ 내용참고 : IT 학원 강의 및 책 '혼자 공부하는 자바스크립트' ]

+ Recent posts