[JavaScripts] DOM 기초

JIIJIIJ·2023년 4월 20일
1

JavaScript

목록 보기
3/23
post-thumbnail

DOM(문서 객체 모델/Document Object Model)이란

  • Browser API의 한 종류인 DOM은 문서의 구조화된 표현을 제공하며, 프로그래밍 언어가 DOM 구조에 접근할 수 있는 방법을 제공한다.
  • 문서 구조, 스타일, 내용 등을 쉽게 변경할 수 있게 도와준다.
  • HTML콘텐츠를 추가, 제거, 변경하고, 동적으로 페이지에 스타일을 추가하는 등의 기능을 수행한다.
  • HTML문서를 구조화하여 각 요소를 객체(object)로 취급한다.
  • DOM은 문서를 논리 트리로 표현하며, DOM메서드를 사용하면 프로그래밍적으로 트리에 접근할 수 있고 이를 통해 문서의 구조, 스타일, 컨텐츠를 변경할 수 있다.
  • DOM은 동일한 문서를 표현하고, 저장하고, 조작하는 방법을 제공한다.

DOM의 기본 구조

  • DOM Tree
    • DOM에서 모든 것은 Node이다. 즉, HTML 요소, 속성, 텍스트 모든 것이 Node이다.
    • 각 노드는 부모, 자식 관계를 형성하고 이에 따라 상속 개념도 동일하게 적용된다.
    • DOM Tree

  • Node
    • DOM의 구성 요소 중 하나이며, HTML 문서의 모든 요소를 나타낸다.
      • Document Node === HTML 문서 전체를 나타내는 코드
      • Element Node === HTML 요소를 나타내는 노드 EX) p태그
      • Text Node === HTML 텍스트, Element Node내의 텍스트 컨텐츠를 나타낸다.
      • Attribute Note === HTML 요소의 속성을 나타내는 노드이다.

  • window object
    • DOM을 표현하는 창이며, 가장 최상위 객체이다.(작성 시 생략 가능)
    • 탭 기능이 있는 브라우저에서는 각각의 탭을 각각의 window 객체로 나타낸다.
    • window 메서드 예시
      • window.open() - 새 탭 열기
      • window.alert() - 경고 대화 상자 표시
      • window.print() - 인쇄 대화 상자 표시

  • document object
    • 브라우저가 불러온 웹 페이지이다.
    • 페이지 컨텐츠의 진입점 역할을 하고,body태그 등과 같은 수많은 다른 요소들을 포함하고 있다.
    • document의 속성 예시
      • HTML의 title값 - 현재 문서의 제목
      • document는 window의 속성이다.

  • Node 와 Element
    • 예시 코드의 모든 것은 Node이다.
    • head와 body는 HTML요소로 Element이다.
    • title, p는 Text Node이면서 Element이다.
    • id = unique는 DOM에서는 Attr Node이고, HTML요소인 p의 속성이므로 Element가 아니다.
    • Node와Element

DOM의 조작

  • 선택 (Select)
    • document.querySelector(selector)
      • 제공한 선택자와 일치하는 element 한 개를 선택한다.
      • 제공한 CSS selector를 만족하는 첫 번째 element 객체를 반환하고, 값이 없다면 null을 반환한다.
      • querySelector예시
    • document.querySelectorAll(selector)
      • 제공한 선택자와 일치하는 여러 element를 선택한다.
      • 매칭 할 하나 이상의 셀렉터를 포함하는 유효한 CSS selector를 인자(문자열)로 받는다.
      • 제공한 CSS selector를 만족하는 NodeList를 반환한다.
      • querySelectorAll예시

  • 조작 (Manipulation) - 생성, 추가, 삭제 등
    • document.createElement(tagName) - 생성
      • 작성한 tagName의 HTML요소를 생성하여 반환한다.
    • HTML.innerText - 입력
      • Node 객체와 그 자손의 텍스트 컨텐츠(DOMString)를 표현한다.
      • 사람이 읽을 수 있는 요소만 남긴다.
      • 줄 바꿈을 인식하고 숨겨진 내용을 무시하는 등 최종적으로 스타일링이 적용된 모습으로 표현된다.
    • Node.appendChild() - 추가
      • 한 Node를 특정 부모 Node의 자식 NodeList 중 마지막 자식으로 삽입한다.
      • 한번에 오직 하나의 Node만 추가 할 수 있으며, 추가된 Node객체를 반환한다.
    • Node.removeChild() - 삭제
      • DOM에서 자식 Node를 제거하고, 제거된 Node를 반환한다.
      생성, 입력, 삭제 예시 생성, 입력, 삭제 예시2

  • 속성 조회 및 설정
    • Element.getAttribute(attributeName)
      • 해당 요소의 지정된 값(문자열)을 반환한다.
      • 인자(attributeName)는 값을 얻고자 하는 속성의 이름이다.
    • Element.setAttribute(name, value)
      • 지정된 요소의 값을 설정한다.
      • 속성이 이미 존재하면 값을 갱신하고, 존재하지 않으면 지정된 이름과 값으로 새 속성을 추가한다.
    • Element.classList, Element.style
      • 기존 속성은 유지한 채로, 새로운 값을 추가해준다.
      • 직접적으로 해당 요소의 각 속성들을 제어 할 수 있다.
      속성 조회 및 설정 예시3 속성 조회 및 설정 예시1 속성 조회 및 설정 예시2

  • classList
    • DOM요소의 클래스를 조작하는 메서드를 제공한다.
    • DOM요소의 클래스를 추가, 제거, 토글 할 수 있다.
    • classList의 메서드
      • add(className): DOM 요소의 클래스 목록에 className을 추가
      • remove(className): DOM 요소의 클래스 목록에서 className을 제거한다.
      • toggle(className): DOM 요소의 클래스 목록에서 className을 토글한다. 즉, 클래스 목록에 className이 없으면 추가하고, 있으면 제거한다.
      • contains(className): DOM 요소의 클래스 목록에 className이 있는지 확인한다. className이 있다면 true를 반환하고, 없다면 false를 반환한다.
      • classList

  • style
    • DOM 요소의 인라인 스타일을 조작하는 메서드를 제공한다.
    • style 속성을 사용하면 JavaScript 코드에서 HTML 요소의 스타일 속성을 직접 수정할 수 있다.
    • style

참고

DOM이란? 쉽게 읽는 프로그래밍

profile
다크모드가 보기 좋아요

0개의 댓글