✊ 필오의 개발일지
Back to Posts
2017년 12월 28일

8/ DOM 확장

8/ DOM 확장

‘프론트엔드 개발자를 위한 자바스크립트 프로그래밍’ 책을 참고하여 정리합니다. 오류가 있다면 언제든지 댓글 남겨주세요.



목차

  1. 선택자 API

  2. querySelector() 메서드

  3. querySelectorAll() 메서드

  4. matchesSelector() 메서드

  5. 요소 간 이동

  6. HTML5

  7. 클래스 관련 추가사항

    • getElementsByClassName() 메서드
    • classList 프로퍼티
  8. 포커스 관리

  9. HTMLDocument의 변화

    • readyState 프로퍼티
    • 호환성 모드
  10. 문자셋 프로퍼티

  11. 커스텀 데이터 속성

  12. 마크업 삽입

    • innerHTML
    • outerHTML
    • insertAdjacentHTML() 메서드
    • 메모리와 성능 문제
  13. scrollIntoView() 메서드

  14. 전용 확장

  15. 문서모드

  16. children 프로퍼티

  17. contains() 메서드

  18. 마크업 삽입

    • innerText 프로퍼티
    • outerText 프로퍼티
  19. 스크롤



DOM은 그 자체로도 매우 잘 정의된 API이긴 하지만, 특정 브라우저 전용 방법으로 확장하여 기능을 추가할 때도 많다.

1. 선택자 API

1-1. querySelector() 메서드

// body 요소를 가져온다. const body = document.querySelector('body'); // ID가 "myDiv"인 요소를 가져온다. const myDiv = document.querySelector('#myDiv'); // 클래스가 "selected"인 요소 중 첫 번째를 가져온다. const selected = document.querySelector('.selected'); // 클래스가 "button"인 이미지 중 첫 번째를 가져온다. const img = document.querySelector('img.button');

1-2. querySelectorAll() 메서드

1-3. matchesSelector() 메서드 ( matches()로 변경됨 ) + 



2. 요소 간 이동

요소간 이동 API에서 추가된 새 프로퍼티들



3. HTML5

3-1. 클래스 관련 추가사항

getElementsByClassName() 메서드

반환값이 살아있는 객체라서 생기는 이슈

// HTMLCollection을 반환한다. var elems = document.getElementsByClassName('red'); for (var i = 0; i < elems.length; i++) { // 클래스 어트리뷰트의 값을 변경한다. elems[i].className = 'white'; } // white red white

HTMLCollection은 실시간으로 Node의 상태 변경을 반영한다. (live HTMLCollection) 실시간으로 Node의 상태 변경을 반영하기 때문에 loop가 필요한 경우 주의가 필요하다. 아래와 같은 방법으로 회피할 수 있다.

방법1 > 역방향으로 돌리기

var elems = document.getElementsByClassName('red'); for (var i = elems.length - 1; i >= 0; i--) { elems[i].className = 'white'; }

방법2 > none-live NodeList를 반환하는 querySelectorAll을 사용한다.

// querySelectorAll는 Nodelist(non-live)를 반환한다. IE8+ var elems = document.querySelectorAll('.red'); for (var i = 0; i < elems.length; i++) { elems[i].className = 'white'; }

classList 프로퍼티

DOMTokenList 의 메서드


3-2. 포커스 관리

document.activeElement

document.hasFocus()


3-3. HTMLDocument의 변화

readyState 프로퍼티

<head> 프로퍼티


3-4. 문자셋 프로퍼티

document.charset

document.defaultCharset


3-5. 커스텀 데이터 속성 data-


3-6. 마크업 삽입

마크업이 포함된 콘텐츠를 추가하는 것은 크로스 스크립팅 공격 (XSS: Cross-Site Scripting Attacks)에 취약하다.


innerHTML

  1. 읽기모드 : 요소와 주석, 텍스트 노드 등의 자식 노드를 모두 나타내는 HTML 표현을 반환한다.
  1. 쓰기모드 : 주어진 값을 바탕으로 새 DOM 서브트리를 만들어서 요소의 잣기 노드를 완전히 교체한다.

outerHTML

  1. 읽기모드 : 호출한 HTML 요소를 자식 노드와 함께 반환
  2. 쓰기모드 : 주어진 HTML 문자열을 파싱하여 DOM 서브트리를 생성하고 호출한 노드 전체를 교환하다.

insertAdjacentHTML() 메서드

삽입할 위치 매개변수


메모리와 성능 문제


3-7. scrollIntoView() 메서드

모든 HTML요소에 존재하며 브라우저 창이나 컨테이너 요소를 스크롤해서 해당 요소가 뷰포트에 보이게 한다.



4. 전용 확장

  1. 문서모드

  2. children 프로퍼티

  3. contains() 메서드

  4. 마크업 삽입

    • innerText 프로퍼티
    • outerText 프로퍼티
  5. 스크롤


참고링크

  1. http://poiemaweb.com/js-dom 

생소했던 단어

Previous3 way handshake
Next8/ DOM(1) - 노드의 계층 구조(2)

Related

© 2025 Felix