우리는 자바스크립트 코드를 짜면서 querySelector와 getElementById를 자주 사용합니다. 저 역시 자주 사용하는 querySelector와 getElementById의 정확한 차이점을 알고싶어서 공부해봤습니다.
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>
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가 더 좋은 방법일까요?? 그렇지는 않습니다. 그 이유는 밑에서 자세히 알아보겠습니다.
"
<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>"
"
<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를 사용하는 것이 제일 좋은 방법 같습니다!!
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
잘 보고 갑니다