본문 바로가기

Hanghae99

221129 TIL 07 문서 객체 모델 1

07-1 문서객체 조작하기

 - 문서객체란? html의 요소와 같은것

 - 왜 자바스크립트를 통해 문서객체를 조작해야 하는가? 
   ! 화면의 동적인 움직임을 만들기 위해 JS를 사용한다. 이때 DOM (Document Object Model)을 사용하는 것이다. 이것을 그동안 우리는 jquery library 를 이용해서 간편하게 해왔던 것이다.

 - 제이쿼리와 같은 라이브러리와 리액트와 같은 프레임워크

►리액트는 라이브러리? 프레임워크?

 - 둘다 다른 누군가가 써놓은 코드를 내가 편하게 코딩을 하기위해 가져다 쓰는 것이다.

 - 가장 큰 차이점은 "누가 누구를 통제하는가?"

  라이브러리 프레임워크
특징 '내'가 필요할때 가져다 쓴다 "프레임 워크"가 당신을 부른다.
"프레임 워크"의 규칙을 따라야한다.
(어디에 뭘 어떤 코드를 써야하는지 등등)
대표적인 예시 jquery django web framework

 - 결론적으로, 리액트는 UI를 구축할때 "내"가 리액트를 가져다가 쓴다는 면에서는 "라이브러리"이면서도,

 - "리액트"에서 우리가 작성한 컴포넌트를 부른다는 면에서는 "프레임워크"라고 볼수 있다.

 - 이것은 명확하게 구분지을수 없으며, 구분지을 필요도 없다.

 - 그러나 개념적으로 라이브러리와 프레임워크의 차이점을 알고 있는 것은 도움이 된다.

 

DOMContentLoaded 이벤트

 - HTML 페이지의 모든 문서 객체(요소)를 웹 브라우저가 읽어들였을 때 발생시키는 이벤트입니다.

 

문서객체 가져오기

 - querySelector() : 요소를 하나만 추출

 - querySelectorAll() : 문서객체를 여러개 추출

 - forEach() : querySelectorAll() ㅔ소드를 사용할때 내부의 요소에 접근하고 활용하기 위해서 반복이 필요한데 이때 활용함

사용 예시

    <script>
      document.addEventListener('DOMContentLoaded', () => {
        // 요소를 읽어들입니다.
        const headers = document.querySelectorAll('h1')

        // 텍스트와 스타일을 변경합니다.
        headers.forEach((header) => {
          header.textContent = 'HEADERS'
          header.style.color = 'white'
          header.style.backgroundColor = 'black'
          header.style.padding = '10px'
        })
      })
    </script>
  </head>
  <body>
    <h1></h1>
    <h1></h1>
    <h1></h1>
    <h1></h1>
  </body>

 

글자 조작하기

 - 문서객체.textContent : 입력된 문자열을 그대로 넣습니다.

 - 문서객체.innerHTML: 입력된 문자열을 HTML 형식으로 넣습니다.

사용예시

    <script>
      document.addEventListener('DOMContentLoaded', () => {
        const a = document.querySelector('#a')
        const b = document.querySelector('#b')

        a.textContent = '<h1>textContent 속성</h1>'
        b.innerHTML = '<h1>innerHTML 속성</h1>'
      })
    </script>
  </head>
  <body>
    <div id="a"></div>
    <div id="b"></div>
  </body>

 

속성 조작하기

 - 문서객체.setAttribute(속성이름, 값) : 특정 속성에 값을 지정합니다.

 - 문서객체.getAttribute(속성이름) : 특정 속성을 추출합니다.

사용예시

    <script>
      document.addEventListener('DOMContentLoaded', () => {
        const rects = document.querySelectorAll('.rect')

        rects.forEach((rect, index) => {
          const width = (index + 1) * 100
          const src = `http://placekitten.com/${width}/250`
          // 간단한 사용예: rect.src = src
          rect.setAttribute('src', src)
        })
      })
    </script>
  </head>
  <body>
    <img class="rect">
    <img class="rect">
    <img class="rect">
    <img class="rect">
  </body>

 

스타일 조작하기

 - 자바스크립트에서 스타일을 조작하는 방법

 

문서 객체 생성하기

 - document.createElement(문서 객체 이름) : 문서객체를 생성할때 사용

 - 부모객체.appendChild(자식객체) : 어떤 부모 객체 아래에 자식 객체를 추가할 때 사용.

 

문서 객체 이동하기

 - 문서객체의 부모는 언제나 하나여야 하는데, 따라서 문서객체를 다른 문서 객체에 추가하면 문서객체가 이동한다.

사용 예시

    <script>
      document.addEventListener('DOMContentLoaded', () => {
        // 문서 객체 읽어들이고 생성하기
        // id 속성이 first인 div tag를 선택
        const divA = document.querySelector('#first')
        // id 속성이 second인 div tag를 선택
        const divB = document.querySelector('#second')
        // h1 tag를 생성
        const h1 = document.createElement('h1')
        h1.textContent = '이동하는 h1 태그'

        // 서로 번갈아가면서 실행하는 함수를 구현합니다.
        const toFirst = () => {
        // h1을 divA에 추가
          divA.appendChild(h1)
          // 1초(1000밀리초) 뒤에 toSecond함수를 실행
          setTimeout(toSecond, 1000)
        }
        const toSecond = () => {
        // h1을 divB에 추가
          divB.appendChild(h1)
          // 10초(10000밀리초) 뒤에 toSecond함수를 실행
          setTimeout(toFirst, 10000)
        }
        toFirst()
      })
    </script>
  </head>
  <body>
    <div id="first">
      <h1>첫 번째 div 태그 내부</h1>
    </div>
    <hr>
    <div id="second">
      <h1>두 번째 div 태그 내부</h1>
    </div>
  </body>

 

문서 객체 제거하기

 - 부모객체.removeChild(자식객체)

 - 부모객체에 이미 연결된 문서 객체의 경우: 문서 객체.parentNode.romoveChild(문서 객체)

 

이벤트 설정하기

 - 문서객체.addEventListener(이벤트 이름, 콜백 함수)

  - 이때 실행할 함수를 event listener 또는 event handler 라고 함.

 

총 정리

이 부분을 통해서 DOM 이라는 개념을 이해 할 수 있다.

 

DOM이란?

 - HTML, XML 문서의 프로그래밍 interface

 - 문서의 구조화된 표현(structured representation)을 제공

 - 프로그래밍 언어가 DOM 구조에 접근할 수 있는 방법을 제공하여 그들이 문서 구조, 스타일, 내용 등을 변경할 수 있게 돕는다.

 - DOM 은 nodes와 objects로 문서를 표현

◆ nodes란? 링크와 링크로 연결된 하나의 지점을 의미한다. 그것은 1대의 컴퓨터가 될수도 있고, 어떠한 추상적인 개념이 될 수도 있다.