querySelector 와 getElementById의 차이

김재도·2022년 4월 3일
2

우리는 자바스크립트 코드를 짜면서 querySelector와 getElementById를 자주 사용합니다. 저 역시 자주 사용하는 querySelector와 getElementById의 정확한 차이점을 알고싶어서 공부해봤습니다.

querySelector란?

element = document.querySelector(selectors);

selector의 구체적인 그룹과 일치하는 document안 첫번째 엘리먼트를 반환한다. 일치하는게 없으면 null반환한다.

코드

querySelector

    <div id="parent">
        <div class="child"> // id="child"로 한 후 querySelector 부분을 #child로 
        						바꿔도 가능
            안녕하세요
        </div>
    </div>
    <script>
        var child = document.querySelector("#parent .child");
        child.style.color="red";

    </script>

결과

getElementById란?

element = document.getElementById(selectors);

id를 통해 엘리먼트를 반환한다. 만약 document에 구체적인 ID의 엘리먼트가 없다면 null을 반환한다.

코드

<div id="parent">
    <div id="child">
        안녕하세요
    </div>
</div>
<script>
    var child = document.getElementById("child");
    child.style.color="blue";
</script>

결과

위 코드에서 알 수 있듯이 getElementById는 id값으로만 element를 가져 올 수 있고 querySelector는 id, class를 비롯해 다양한 선택자를 사용할 수 있습니다. 그렇다면 생산성이 좋은 querySelector가 더 좋은 방법일까요?? 그렇지는 않습니다. 그 이유는 밑에서 자세히 알아보겠습니다.

getElementsByClassName

코드

"

    <div id="child" class="hi">
        안녕하세요
    </div>
    <div id="child" class="hi">
        안녕하세요
    </div>
    <div id="child" class="hi">
        안녕하세요
    </div>
    <div id="child" class="hi">
        안녕하세요
    </div>
</div>
<script>
    var hi = document.getElementsByClassName("hi");
    hi[0].style.color="blue";

</script>"

querySelectorAll

코드

"

    <div id="child" class="hi">
        안녕하세요
    </div>
    <div id="child" class="hi">
        안녕하세요
    </div>
    <div id="child" class="hi">
        안녕하세요
    </div>
    <div id="child" class="hi">
        안녕하세요
    </div>
</div>
<script>
    var hi = document.querySelectorAll(".hi");
    hi[0].style.color="blue";

</script>"

위 코드와 같은 예시를 통해 class=hi 인 요소를 모두 얻고자 할 때 getElementsByClassName과 querySelector의 사용법을 볼 수 있습니다.

결과

결과는 같지만 리턴 타입에서 차이가 있습니다.
getElementsByClassName은 HTMLCollection을, querySelectorAll은 NodeList를 리턴합니다.

HTMLCollection은 name, id, index번호로 접근 가능한 반면, NodeList는 index 번호로만 접근이 가능하기 때문에 처리속도가 getElementsByClassName이 더 빠릅니다.

결론

getElementById가 querySelector에 비해 속도는 빠르지만 구체적인 element를 선택하거나 다른 선택자들을 사용할 수 있는 점에서는 querySelector가 낫다고 생각이듭니다. id값으로만 하는 상황에서는 getElementById를 사용하고 class나 다른 선택자들을 사용하고 싶으면 querySelector를 사용하는 것이 제일 좋은 방법 같습니다!!

Reference

https://calssess.tistory.com/72
https://bobbohee.github.io/2021-02-12/getelementbyid-versus-queryselector
https://velog.io/@chloeee/getElementById-%EA%B7%B8%EB%A6%AC%EA%B3%A0-querySelector-%EC%B0%A8%EC%9D%B4%EC%A0%90
https://seokzin.tistory.com/entry/JavaScript-getElementById-querySelector-%EC%B0%A8%EC%9D%B4%EC%A0%90

profile
프론트엔드 개발자입니다.

1개의 댓글

comment-user-thumbnail
2022년 11월 10일

잘 보고 갑니다

답글 달기