본문 바로가기
개발(Development)/JS(자바스크립트)

[자바스크립트] HTML 엘리먼트(태그/노드) 선택/취득 방법

by 카레유 2021. 7. 4.

# HTML 엘리먼트(태그/노드) 선택/취득 방법

브라우저 환경의 전역객체인 winodw의 documet객체에 정의된 메서드를 활용하여

HTML 노드를 선택하여 조작할 수 있다.


# documet.getElement...종류

1. id로 1개의 엘리먼트 선택

window.document.getElementById('아이디') => HTMLxxxElement 반환

*window 생략 가능

 

2. class로 여러개의 엘리먼트 선택

document.getElementsByClassName('클래스') => HTMLCollection(이터러블) 반환

 

3.태그명으로 여러개의 엘리먼트 선택

document.getElementsByTagName('태그') => HTMLCollection(이터러블) 반환


# document.querySelector... 종류

1. CSS선택자로 1개의 엘리먼트 선택

document.querySelector('CSS선택자') => HTMLxxxElement

 

2. CSS선택자로 여러개의 엘리먼트 선택

document.querySelectorAll('CSS선택자') => NodeList(이터러블)


# HTMLCollection, NodeList 주의 사항

HTMLCollection, NodeList 모두 선택된 HTMLxxxElement 객체를 순회할 수 있는 이터러블인데,

상태 변화를 체크하여 조작하기 어려운 부분이 있다.

 

그래서 배열로 변환(Array.from(), [...스프레드문법] 등 활용)한 다음,

각 HTML엘리먼트들을 조작하는게 안전하다.


# 샘플 예제 소스코드

위에서 정리한 HTML 엘리먼트 취득 방법을 모두 사용했으며,

HTMLCollection, NodeList 는 배열(Array)로 변환하여 사용했다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="divId"></div>
    <div class="divClass"></div>
    <div class="divClass"></div>
    <h2>h2 입니다</h2> 
    <h2>h2 입니다</h2> 

    <script>
    
        // 1. document.getElementById('아이디') => HTMLxxxElement
        const divById = document.getElementById('divId');
        divById.innerHTML = "<h3>id로 접근했어요</h3>";

        // 2. document.getElementsByClassName('클래스'); => HTMLCollection
        const divByClass = document.getElementsByClassName('divClass');
        [...divByClass].forEach(function(item, index, array){ // 배열로 변환하여 사용하는 것이 안전(스프레드 문법)
            item.innerHTML = "<h3>class로 접근했어요</h3>";  
        })

        // 3. document.getElementsByTagName('태그'); => HTMLCollection
        const headerByTag = document.getElementsByTagName('h2');
        Array.from(headerByTag).forEach((item)=>{ // 배열로 변환하여 사용하는 것이 안전.(Array.from()메서드)
            item.innerHTML = "<h2>tag로 접근했어요</h2>";
        });

        // 4. document.querySelector('CSS선택자') => HTMLxxxElement
        const divByQuery = document.querySelector('div:nth-of-type(2)');
        divByQuery.style.color = 'hotpink';
        
        // 5. document.querySelectorAll('CSS선택자') => NodeList
        const headersByQuery = document.querySelectorAll('h2');
        Array.from(headersByQuery).forEach((value)=>{
            value.style.backgroundColor = 'skyblue';
        });
    
    </script>
</body>
</html>

 

<실행 결과>

 

댓글