Front-end/javascript

[JavaScript] ⭐️DOM 개념 정리

year.number 2022. 9. 4. 23:49
모든 객체는 속성 or 메서드를 가지고 있다

1️⃣ Window 객체

History(주소내역), Location(주소표시줄), document(문서), window(창 - 최상위 객체)

 

 

Window 객체의 속성 일부

innerWidth
innerHeight
창의 콘텐츠 영역 폭/높이를 반환 - 스크롤바, 제목표시줄 등은 제외
outerWidth
outerHeight
창의 모든 인터페이스 요소(스크롤바 등)를 포함한 폭/높이를 반환
closed 창이 열려 있는지 닫혀 있는지를 Bool 표현식으로 반환
닫혀 있으면 true, 열려 있으면 true 반환
top 현재 창의 최상위 브라우저 창을 반환

 

예시)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Practice DOM</title>
    <style>
        body {height: 3000px; background-color: rgb(241, 241, 241); border: 10px solid black; margin: 0;}
    </style>
    <script>
        // 객체명.속성명으로 작성

        // 📌 객체의 크기값 가져오기 (innerHeight와 outerHeight 비교)
        // 1. innerHeight: 창의 세로폭(스크롤바, 제목 표시줄, border값 등 제외)
        document.write('innerHeight: ' + window.innerHeight + '<br>');  //934

        // 2. outerHeight: 창의 세로폭(스크롤바, 제목 표시줄, border값 등 포함)
        document.write('outerHeight: ' + window.outerHeight + '<br>');  //1046
    </script>
</head>
<body>
    
</body>
</html>

 

Window 객체의 메서드 일부

close 창을 닫는 메서드 - 매개변수X
moveBy/To(x,y) 창을 상대적/절대적으로 이동시키는 메서드
open(url, name, specs, replace) 새창 또는 새탭으로 창을 여는 메서드
resizeBy/To(w,h) 창 사이즈를 상대적/절대적으로 변경시키는 메서드
scrollTo/By(x,y) 창의 스크롤바 위치를 절대적/상대적으로 이동시키는 메서드

 

예시 1) open 메서드

        // 📌 open 메서드
        // open(url, name, specs, replace);

        window.open('http://google.com', '', 'width=300, height=300, true');

open 메서드는 브라우저가 팝업을 차단하기 때문에 제이쿼리나 다른 방식으로 구현하는 것이 일반적이다.

 

 

 

예시 2) close 메서드

        // 📌 close 메서드
        // self: 현재 창을 선택하는 window 객체의 속성

        var num = 5;

        // 5초부터 1초 간격으로 줄어드는 숫자를 화면에 표시
        setInterval(function(){ // 콜백 함수를 매개변수로 함
            document.write('<h1>' + num + '</h1>');

            num--;
        },1000);

        // 5초가 지나면 창이 닫힘
        setTimeout(function(){
            window.self.close();
        },5001);

 


2️⃣ DOM(Document Object Model)

DOM이란?

- HTML 문서의 모든 요소를 의미한다

- JS는 HTML DOM을 이용해서 모든 요소에 접근 가능하다

 


문서 객체의 getOO() 메서드

아이디 getElementById('아이디명') 문서 객체인 태그의 id값으로 문서 객체를 선택
태그 getElementsByTagName('태그명') 문서 객체인 태그명으로 문서 객체를 선택
태그는 한 개만 쓰지 않기 때문에 복수인 배열로 선택
클래스 getElementsByClassName('클래스명') 문서 객체인 태그의 class 값으로 문서 객체를 선택
클래스명도 한 개만 쓰지 않기 때문에 복수인 배열로 선택

 

    <!-- 📌 getElementById(): 태그의 id값으로 문자 객체를 선택 -->

    <h1 id="text01">Title</h1>
    <h3 id="text02">Sub Title</h3>
    <h6 id="text03">contents</h6> -->

    <script>

        // 문서 객체 선택
        var text01 = document.getElementById("text01");
        var text02 = document.getElementById("text02");
        var text03 = document.getElementById("text03");
    </script>

 

 

 

    <!-- 📌 getElementsByTagName(): 태그명으로 문서 객체를 선택, 복수인 배열로 선택 -->
    <h1>제목태그</h1>
    <h1>제목태그</h1>
    <h1>제목태그</h1>

    <script>

        // 문서 객체 선택
        var text = document.getElementsByTagName("h1");
        var text02 = document.getElementsByTagName("h3");
        var text03 = document.getElementsByTagName("h6");

        // style: 문서 객체의 CSS 스타일 컨트롤 속성
        // style.css속성명 = 값;
        text[0].style.color = 'red'
        text[1].style.color = 'green'
        text[2].style.color = 'blue'
    </script>

 


queryOO() 메서드

CSS 선택자를 매개변수로 작성한다

 

querySelector 메서드 querySelectorAll 메서드
CSS 선택자로 문서 객체를 직접적으로 선택.
여러 요소가 한번에 선택될 때는 일치되는 첫 번째 요소를 반환 요소가 여러 개일 수 있으므로 배열로 선택

 


문서 객체 생성

 

1. 문서 객체 생성 메서드

createElement('태그명')

 

** appendChild() 메서드와 사용 - 문서 객체 생성한 것을 삽입

** innerHTML = '텍스트'; - 텍스트 추가

 

        <!-- 문서 객체 생성 -->
        <!-- 1️⃣ 문서 객체 생성 메서드: createElement('태그명')  -->

        <!-- 정적 생성 -->
        <h1>제목 태그1</h1>

        <!-- 동적 생성 -->
        <script>
            var h2 = document.createElement('h2');
            h2.innerHTML = '제목태그2';
            document.body.appendChild(h2);
        </script>

 

 

2. 속성 컨트롤 메서드

getAttribute('속성명') setAttribute('속성명', 값)
문서 객체의 태그 속성값을 얻어오는 메서드, 게터 문서 객체의 태그 속성값을 변경시티는 메서드, 세터

 

        <!-- 2️⃣ 속성 컨트롤 메서드: getAttribute('속성명') / setAttribute('속성명', 값) -->
        <script>
            var img = document.createElement('img');

            img.setAttribute('src', 'test.jpg');
            img.setAttribute('width', 300);

            document.body.appendChild(img);

            var w = img.getAttribute('width');

            alert(w);
        </script>

 

3. 텍스트 컨트롤 속성

        <!-- 3️⃣ 텍스트 컨트롤 속성 -->
        <h1 id="h1Text01"></h1>
        <h1 id="h1Text02"></h1>
        <h1 id="h1Text03"></h1>

        <script>
            //1. 문서 객체 선택
            var h1Text01 = document.getElementById('h1Text01');
            var h1Text02 = document.getElementById('h1Text02');
            var h1Text03 = document.getElementById('h1Text03');

            h1Text01.innerHTML = '<a href="#">링크태그1</a>'; 
            h1Text02.innerHTML = '<a href="#">링크태그2</a>'; 
            h1Text03.innerHTML = '<a href="#">링크태그3</a>'; 
        </script>

 

💡 문서 객체 텍스트 관련 속성

innerHTML 텍스트에 있는 태그를 태그로 인식
  숨겨진 것(display: none;)도 같이 반환됨
innerText 텍스트에 있는 태그를 인식하지 못함
  숨겨진 것(display: none;)을 반환하지 못함
textContent 노드가 갖고 있는 텍스트를 컨트롤
  텍스트에 있는 태그를 인식하지 못함
  숨겨진 것(display: none;)도 같이 반환됨