본문 바로가기

프로그래밍 공부/JavaScript

JavaScript - 문서 객체 선택

웹 페이지에 존재하는 HTML 태그를 가져오는 방법은 여러가지가 있는데, HTML 태그에서 개발자가 지정한 id 선택자를 이용해 그 아이디를 선택해 가져오는 방법이 있다.

메서드 이름 설명
getElementById(id) 태그의 id 속성이 매개변수와 일치하는 객체를 선택
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
    <script>
        window.onload=function(){
            // getElementById() 메서드로 각각 id가 'header-1'
            // 그리고 'header-2'인 html 태그를 선택한다.
            let header1=document.getElementById('header-1');
            let header1=document.getElementById('header-2');
 
            // innerHTML을 이용해 내부의 텍스트를 변경한다.
            header1.innerHTML='This is Header-1';
            header2.innerHTML='This is Header-2';
        }
    </script>
</head>
<body>
    <!-- innerHTML로 인해 'This is Header-1'로 변경됨 -->
    <h1 id="header-1">Header-1</h1>
    <!-- innerHTML로 인해 'This is Header-2'로 변경됨 -->
    <h1 id="header-2">Header-2</h1>
</body>
</html>
cs

getElementById로 가져온 HTML 태그는 innerHTML을 이용해 내부의 텍스트 노드나 속성을 변경 및 조작을 할 수 있다.

HTML 태그에 id 선택자는 여러개의 HTML 태그를 하나의 id로 지정할 수 없다. 따라서 getElementById로 여러개의 HTML 태그를 가져오려고 하면 번거롭게 일일히 써줘야 하는 불편함이 있다. 그래서 단순히 HTML 태그를 선택해 가져오는 메서드가 존재한다.

메서드 이름 설명
getElementsByName(name) 태그의 name 속성이 매개변수와 일치하는 객체를 선택
getElementsByTagName(tagName) tagName 매개변수와 일치하는 문서 객체를 배열로 선택
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
    <script>
        window.onload=function(){
            let headers=document.getElementsByTagName('h1');
            headers[0].innerHTML('getElementsByTagName()으로 선택된 Header1');
            headers[1].innerHTML('getElementsByTagName()으로 선택된 Header2');
        }
    </script>
</head>
<body>
    <h1>Header1</h1>
    <h1>Header2</h1>
</body>
</html>
cs

getElementByName(name)는 내부 매개변수로 name을 가져오는데 <h1>태그를 예로 들면 <h1 name='selected'>텍스트 노드</h1>같은 방식으로 내부에 name 속성을 지정해 두는 것을 말한다. getElementByName(name)과 getElementByTagName(tagName)은 모두 선택된 HTML 태그를 배열로서 정리하게 되는데, 위의 코드처럼 h1태그가 2개가 선택이 되었다면 위에 있는 <h1> 태그가 인덱스로 0번째고, 아래의 <h1> 태그가 인덱스로 1번째이다. 따라서 innerHMTL을 사용할때는 위에있는 <h1> 태그를 선택할 때는 인덱스의 0번째인 [0]을 명시해 주어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
    <script>
        window.onload=function(){
            let headers=document.getElementsByTagName('h1');
            for(let i=0; i<headers.length; i++){
                headers[i].innerHTML='반복문으로도 사용가능하다.'
            }
        }
    </script>
</head>
<body>
    <h1>Header1</h1>
    <h1>Header2</h1>
</body>
</html>
cs

기본적으로 getElementByName()과 getElementByTagName()은 HTML 태그를 가져오게되면 배열로 정리가 되기 때문에 for 반복문을 통한 일괄 조작이 가능하다. 단 배열이라고 해서 for in 반복문은 사용해서는 안된다. for 반복문과는 다르게 for in 반복문을 사용하면 문서 객체 이외의 속성에도 접근이 되서 바뀔 수 있기 때문에 for in 반복문이 아닌 for 반복문을 사용해야한다.

메서드 이름 설명
querySelector(선택자) 선택자로 가장 처음 선택되는 문서 객체를 가져온다.
querySelectorAll(선택자) 선택자를 통해 선택되는 문서 객체를 배열로 가져온다.

querySelector(선택자)와 querySelectorAll(선택자)는 이전에 getElementById(id)와는 다르게 CSS3에서 사용하는 선택자로 문서 객체를 선택할 수 있게 만들어 준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
    <script>
        window.onload=function(){
            let header1=document.querySelector('.class1');
            let header2=document.querySelectorAll('.class2');
 
            header1.innerHTML='querySelector(class1)';
            header2[0].innerHTML='querySelectorAll(class2)';
            header2[1].innerHTML='querySelectorAll(class2)';
        }
    </script>
</head>
<body>
    <h1 class="class1">Header-1</h1>
    <h1 class="class1">Header-1-1</h1>
    <h1 class="class2">Header-2</h1>
    <h1 class="class2">Header-2-1</h1>
</body>
</html>
cs

문서 객체 가져오기.html
0.00MB