본문 바로가기

웹언어/JAVASCRIPT

[JS강좌] 20강 DOM - 문서객체선택 - 오쌤의 니가스터디

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

** 동영상으로 보고 싶은 분은 아래 주소를 클릭해주세요.

https://youtu.be/dm5oqw1F8NQ

 

 

 

 

 

 

 

 

 

 

 

1. DOM(document object model)이란?

- html문서의 모든 요소를 의미합니다.

- 자바스크립트는 HTML DOM을 사용하여 모든 요소에 접근할 수 있습니다.

 

 

 

 

 

 

 

 

1) 자바스크립트가 할 수 있는 DOM의 동적기능

- 자바스크립트는 페이지의 모든 HTML를 변경할 수 있습니다.

- 자바스크립트는 페이지의 모든 HTML태그 속성을 변경할 수 있습니다.

- 자바스크립트는 페이지의 모든 CSS 스타일을 변경할 수 있습니다. 

- 자바스크립트는 기존 HTML 요소 및 속성을 제거할 수 있습니다. 

- 자바스크립트는 새로운 HTML요소 및 속성을  추가할 수 있습니다.

- 자바스크립트는 모든 기존 HTML이벤트에 반응할 수 있습니다. 

 

 

 

 

 

 

 

 

 

2) HTML DOM

- 객체로서의 HTML요소

- 모든 HTML 요소의 속성(properties)

- 모든 HTML 요소에 접근할 수 있는 메서드(Method)

- 모든 HTML에 대한 이벤트

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 문서객체 선택메서드

- 모든 객체는 속성과 메서드를 갖고 있습니다.

- 물론 경우에 따라 속성만 갖고 있을수도, 메서드만 갖고 있을수도 있습니다.

 

 

 

 

 

 

1) 문서객체 선택 메서드의 종류

메서드 종류 설명
getElementById('아이디명') 문서객체인 태그의 id값으로 문서객체를 선택함
getElementsByTagName('태그명') 문서객체인 태그명으로 문서객체를 선택함. 태그는 한개만 쓰지 않기 때문 복수인 배열로 선택함.
getElementsByClassName('클래스명') 문서객체인 태그의 class값으로 문서객체를 선택함.  클래스명도 역시 한개만 쓰지 않기 때문에 복수인 배열로 선택함
querySelector('CSS선택자') CSS선택자로 문서객체를 직접적으로 선택함, 여러 요소가 한번에 선택될때는 일치되는 첫번째 요소를 반환
querySelectorAll('CSS선택자') CSS선택자로 문서객체를 직접적으로 선택함. 요소가 여러 개일 수 있으므로 배열로 선택

 

 

 

 

 

 

 

 

 

2) getElementById()

## 문법

document.getElementById('아이디명');

 

 

- 문서객체를 선택해보겠습니다. 대신 문서객체가 선택되었는지를 알아야 하므로 스타일 변경을 통해 알아보도록 하겠습니다.

 

 

## 문서객체 스타일 변경 속성

문서객체선택.style.스타일속성명 = 값;

 

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS DOM</title>
    </head>
    <body>
        <h1 id="text01">제목태그</h1>
        <h1 id="text02">제목태그</h1>
        <h1 id="text03">제목태그</h1>

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

            //문서객체스타일 변경
            text01.style.color = 'red';
            text02.style.color = 'green';
            text03.style.color = 'blue';
        </script>
    </body>
</html>

 

 

## 코드 결과

 

 

 

 

 

 

 

 

 

 

3) getElementsTagName()

## 문법

document.getElementsTagName('태그명');

- 메서드 자체부터 벌써 복수인 s가 붙는 것 보이시죠? 

- 태그명으로 선택시 복수로 배열로 선택이 됩니다.

 

 

 

## 잘못된 문서객체 선택 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS DOM</title>
    </head>
    <body>
        <h1>제목태그</h1>
        <h1>제목태그</h1>
        <h1>제목태그</h1>

        <script>
            //문서객체 선택
            var h1 = document.getElementsByTagName('h1');

            //문서객체스타일 변경
            h1.style.color = 'red';
        </script>
    </body>
</html>

 

 

## 잘못된 문서객체 선택 코드 결과

- 색이 적용안된 것 보이시죠?

- 크롬개발자모드(F12)를 눌러보면 틀렸다고 나오는 것을 볼 수 있습니다.

- 태그명으로 선택시 복수인 배열로 선택되기 때문에 배열호출방식으로 선택해줘야 합니다.

 

 

 

 

 

 

## 잘된 문서객체 선택 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS DOM</title>
    </head>
    <body>
        <h1>제목태그</h1>
        <h1>제목태그</h1>
        <h1>제목태그</h1>

        <script>
            //문서객체 선택
            var h1 = document.getElementsByTagName('h1');

            //문서객체스타일 변경
            h1[0].style.color = 'red';
            h1[1].style.color = 'green';
            h1[2].style.color = 'blue';
        </script>
    </body>
</html>

- 원래 배열을 각각 호출시 배열명[인덱스번호]로 작성합니다.

- 그 방법으로 문서객체를 각각 호출 한 것입니다. 

 

 

 

## 잘된 문서객체 선택 코드 결과

- 에러도 없고 색상이 각각 적용되는 것을 확인할 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

 

4) getElementsClassName()

## 문법

document.getElementsClassName('클래스명');

- 메서드 자체부터 벌써 복수인 s가 붙는 것 보이시죠? 

- 태그명으로 선택시 복수로 배열로 선택이 됩니다.

 

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS DOM</title>
    </head>
    <body>
        <h1 class="text">제목태그</h1>
        <h1 class="text">제목태그</h1>
        <h1 class="text">제목태그</h1>

        <script>
            var text = document.getElementsByClassName('text');

            text[0].style.color = 'red';
            text[1].style.color = 'green';
            text[2].style.color = 'blue';
        </script>
    </body>
</html>

- getElementsTagName()처럼 배열로 선택하시면 됩니다.

 

 

 

## 코드 결과

- 역시 각각 색상이 잘 들어가는 것을 확인할 수 있습니다. 

 

 

 

 

 

 

 

 

 

5) quarySelector()

## 문법

document.querySelector('css선택자');

- css선택자처럼 선택하는 방식입니다.

 

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
    </head>
    <body>
        <h1 class="text">제목태그</h1>
        <h1 class="text">제목태그</h1>
        <h1 class="text">제목태그</h1>
        <script>
            var text = document.querySelector('.text');

            text.style.color = 'red';
        </script>
    </body>
</html>

 

 

## 코드 결과

- 하지만 여러 개가 있다면 첫번째 요소 한개만 선택하게 됩니다.

 

 

 

 

 

 

 

 

6) quarySelectorAll()

## 문법

document.querySelectorAll('css선택자');

- css선택자처럼 선택하는 방식입니다.

- 여러 문서객체인 경우 전부 선택하는 방식입니다.

- 하지만 역시 배열로 처리됩니다.

 

 

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
    </head>
    <body>
        <h1 class="text">제목태그</h1>
        <h1 class="text">제목태그</h1>
        <h1 class="text">제목태그</h1>
        <script>
            var text = document.querySelectorAll('.text');

            text[0].style.color = 'red';
            text[1].style.color = 'green';
            text[2].style.color = 'blue';
        </script>
    </body>
</html>

 

 

 

## 코드 결과

- 각각 색상이 잘 들어가는 것이 확인되시죠?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 준비구문

- 이전 강좌까지는 <script>태그를 <head>태그의 자손으로 작성했습니다.

- 근데 이번 강좌에서는 <body>내부에 작성했습니다. 그 이유를 알아보도록 하겠습니다.

 

 

 

 

 

1) <script>태그를 <head>태그 내부에 작성

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
        <script>
            var text = document.getElementById('text');

            text.style.color = 'red';
        </script>
    </head>
    <body>
        <h1 id="text">제목태그</h1>
    </body>
</html>

- <script>태그를 <head>태그 내부에 작성했습니다.

 

 

 

## 코드 결과

- 에러가 뜨면서 적용안되는 것이 보이시죠?

 

 

 

 

- 코드를 보시면 <script>태그가 <body>태그보다 위쪽에 존재하는 것을 볼수 있습니다.

- 컴퓨터 언어들은 대부분 FIFO(First In First Out)방식을 사용하고 있습니다.

- 먼저 쓴 코드 먼저 처리하고, 나중에 쓴 코드 나중에 처리한다는 의미입니다.

- 그러다보니 아직 <body>내부의 문서객체를 읽지 못한 상태에서 코드가 실행됩니다.

- 그래서 문서객체가 없다고 생각해서 에러가 발생된 것입니다.

 

 

 

 

 

 

 

 

 

 

2) <script>태그를 문서객체 아래에 작성

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
    </head>
    <body>
        <h1 id="text">제목태그</h1>
        <script>
            var text = document.getElementById('text');

            text.style.color = 'red';
        </script>
    </body>
</html>

- 이번에는 <h1>태그 아래에 <script>태그를 붙여보도록 하겠습니다.

 

 

 

## 코드 결과

- 문서객체를 먼저 읽었기 때문에 에러없이 잘 실행되는 것을 확인할 수 있습니다.

- 대부분 자바스크립트는 이 방식을 많이 사용합니다.

 

 

 

 

 

 

 

 

 

 

 

3) 준비구문 

- 근데 꼭 <script>태그를 <head>태그 내부에 쓰고 싶다면 방법은 있습니다.

- 문서객체를 먼저 읽고 스크립트 구문을 실행하라는 준비구문을 작성하면 됩니다.

 

 

## 문법

window.onload = function(){
	//스크립트 코드 작성
}

- 창이 읽혀지고 나면 일어날 일을 콜백함수에 작성하는 구문입니다.

 

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
        <script>
            window.onload = function(){
                var text = document.getElementById('text');

                text.style.color = 'red';
            }
        </script>
    </head>
    <body>
        <h1 id="text">제목태그</h1>
    </body>
</html>

- 준비구문을 작성함으로 <script>태그를 <head>내부에 작성했습니다.

 

 

 

## 코드 결과

- 역시 에러 없이 잘 나오는 것을 확인할 수 있습니다. 

- 하지만 자바스크립트에서는 준비구문은 한번만 작성해야하다보니 실제적으로는 제이쿼리에서처럼 사용하진 않습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. 문서객체 선택 속성

- 모든 객체는 속성과 메서드를 갖고 있습니다.

- 물론 경우에 따라 속성만 갖고 있을수도, 메서드만 갖고 있을수도 있습니다.

 

 

 

 

 

 

1) 문서객체 선택 속성의 종류

속성 종류 설명
document.anchors name 속성이 있는 모든 a태그 요소를 반환
document.baseURI 문서의 절대 기본 URI를 반환
document.body <body>요소를 반환
document.cookie 문서객체의 cookie를 반환
document.doctype 문서객체의 doctype을 반환
document.documentElement <html>요소를 반환
document.documentMode 브라우저에서 사용하는 모드를 반환
document.documentURI 문서객체의 URI를 반환
document.domain 문서객체 서버의 도메인명을 반환
document.embeds 모든 <embed>요소를 반환
document.forms 모든 <form>요소를 반환
document.head <head>요소를 반환
document.images 모든 이미지 요소를 반환
document.implementation DOM구현을 반환
document.inputEncoding 문서객체의 인코딩(character set)을 반환
document.lastModified 문서객체가 업데이트된 날짜와 시간을 반환
document.links href속성이 있는 모든 <area>요소와 <a>요소를 반환
document.readyState 문서의 로드되는 상태를 반환
document.referrer 링크 문서의 URI를 반환
document.scripts 모든 <script>요소를 반환
document.strictErrorChecking 오류검사가 시행되면 반환
document.title <title>요소 반환
document.URL 문서의 전체 URL을 반환




 

 

 

 

 

 

 

 

 

 

 

728x90
반응형