Front/JavaScript

[JavaScript] DOM

ddo04 2024. 7. 6. 23:21

πŸ“±β€Š DOM (Document Object Model)

  • htmlμ΄λ‚˜ xml 같은 λ¬Έμ„œμ— μš”μ†Œλ“€μ„ κ³„μΈ΅μ μœΌλ‘œ ν‘œν˜„ν•΄μ„œ μƒμ„±ν•˜κ³  μˆ˜μ •ν•˜κ³  μ‚­μ œν•˜λŠ” λ“±
  • μ–΄λ–€ μ‘°μž‘μ΄ κ°€λŠ₯ν•˜κ²Œλ” ν•΄μ£ΌλŠ” ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 의미
  • λͺ¨λ“  html의 μš”μ†Œλ“€μ€ html 도움을 톡해 μš°λ¦¬κ°€ μ ‘κ·Όν•  μˆ˜κ°€ 있고 μ‘°μž‘ν•  수 있게 됨
  • DOM을 λ°°μš°λŠ” μ΄μœ λŠ” html λ¬Έμ„œμ— μžˆλŠ” μ–΄λ–€ μš”μ†Œλ₯Ό μ‘°μž‘ν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό λ§Œλ“€μ–΄μ„œ html λ¬Έμ„œμ— μΆ”κ°€ν•˜κ±°λ‚˜ 기쑴의 μš”μ†Œλ₯Ό μ‚­μ œν•˜λŠ” 것을 ν•˜κΈ° μœ„ν•¨
  • μš”μ†Œ 선택과 λ³€κ²½, μƒμ„±μ΄λΌλŠ” 크게 3κ°€μ§€ λΆ„λ₯˜λ‘œ λ‚˜λˆ μ„œ 이야기
  • μš”μ†Œλ₯Ό μ‘°μž‘ν•˜λ €λ©΄ μš°μ„  μ–΄λ–€ μš”μ†Œλ₯Ό μ‘°μž‘ν•  μ§€ μš”μ†Œλ₯Ό μ„ νƒν•˜λŠ” κ³Όμ • ν•„μš”
  • html λ¬Έμ„œμ— μžˆλŠ” μš”μ†Œλ“€ 쀑에 λ‚΄κ°€ μ›ν•˜λŠ” νŠΉμ • μš”μ†Œλ₯Ό μ„ νƒν•˜κΈ° μœ„ν•΄μ„œλŠ” html λ¬Έμ„œ 객체인 Document κ°μ²΄μ—μ„œ μ œκ³΅ν•˜λŠ” λ©”μ†Œλ“œλ“€μ„ ν™œμš©ν•˜κ²Œ 됨
  • μ œκ³΅λ˜λŠ” λ©”μ†Œλ“œλŠ” 5κ°€μ§€
  • id κ°’μœΌλ‘œ μš”μ†Œλ₯Ό μ„ νƒν•˜κ±°λ‚˜ class κ°’μœΌλ‘œ μš”μ†Œλ₯Ό μ„ νƒν•˜κ±°λ‚˜ νƒœκ·Έ 이름 μš”μ†Œ 자체 μ„ νƒμžλ‘œ μ„ νƒν•˜λŠ” 방법 있음

πŸ“±β€Š getElementByld()

  • id 값을 μ‚¬μš©ν•΄μ„œ μš”μ†Œ 선택
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2 id="title" class="title_class">Hello</h2>

    <script src="test.js"></script>
    
    
const title = document.getElementById('title');

console.log(title);

πŸ“± getElementByClassName()

  • 클래슀 이름을 κ°€μ§€κ³  μš”μ†Œ 선택
  • Element 뒀에 s도 λΆ™μŒ
  • getElementById -> getElementsByClassName
  • ()에 λ“€μ–΄κ°€λŠ” 인자의 값은 선택할 μš”μ†Œκ°€ κ°€μ§€κ³  μžˆλŠ” 클래슀 κ°’
  • htmlμ—μ„œ 아이디 값은 μœ μΌν•œ κ°’
  • λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ˜€μ„ λ•Œ μ„ νƒλ˜λŠ” μš”μ†ŒλŠ” ν•˜λ‚˜μ΄μ§€λ§Œ μ€‘λ³΅ν•΄μ„œ λ‹€μˆ˜μ˜ μš”μ†Œλ“€ λ™μΌν•œ 클래슀λ₯Ό μ‚¬μš©ν•  수 있음
  • λ°˜ν™˜λ˜λŠ”κ²°κ³Όκ°’λ„ 단일 μš”μ†Œκ°€ μ•„λ‹ˆλΌ λ°°μ—΄μ²˜λŸΌ 리턴
const title = document.getElementsByClassName('title_class');

console.log(title);

πŸ“± getElementByTagName()

  • νƒœκ·Έ μ΄λ¦„μœΌλ‘œ μš”μ†Œλ₯Ό μ„ νƒν•˜λŠ” 방법
  • μš”μ†Œκ°€ ν•˜λ‚˜κ°€ μ•„λ‹ˆλΌ μ—¬λŸ¬ κ°œκ°€ 될 수 있기 λ•Œλ¬Έμ— λ™μΌν•œ νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λŠ” μš”μ†Œλ“€μ΄ λ°°μ—΄μ²˜λŸΌ λ³€ν™˜
const title = document.getElementsByTagName('h2');

console.log(title);

πŸ“± querySelector(), querySelectorAll()

  • μš”μ†Œλ₯Ό 선택할 λ•Œ Id κ°’μ΄λ‚˜ 클래슀 μ΄λ¦„μ΄λ‚˜ νƒœκ·Έ μ΄λ¦„μœΌλ‘œ μ„ νƒν•˜λŠ” 방법이 μ’‹μ§€λŠ” μ•ŠμŒ
  • 아이디λ₯Ό μ‚¬μš©ν•˜λŠ” 친ꡬλ₯Ό 선택할 λ•ŒλŠ” 이 λ©”μ†Œλ“œλ₯Ό 썻닀가 클래슀둜 μ„ νƒν•˜λ €λ©΄ 또 λ‹€λ₯Έ λ©”μ†Œλ“œλ₯Ό 썻닀가 이런 μ‹μœΌλ‘œ ν•˜μ—¬μ•Ό 함
  • querySelector()은 λ™μΌν•œ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ μ•„μ΄λ””λ‚˜ 클래슀, νƒœκ·Έ μ΄λ¦„μœΌλ‘œ λͺ¨λ‘ 선택할 수 있음
  • νƒœκ·Έμ˜ 이름을 μž‘μ„±ν•˜λ©΄ νƒœκ·Έμ˜ μ΄λ¦„μœΌλ‘œ 선택이 됨
  •  css처럼 #을 뢙이고 Id κ°’μ„μž‘μ„±ν•˜λ©΄ 아이디λ₯Ό κΈ°μ€€μœΌλ‘œ μš”μ†Œκ°€ 선택
  •  css처럼 .을 뢙이고 class 이름을 λͺ…μ‹œν•˜λ©΄ 클래슀λ₯Ό κΈ°μ€€μœΌλ‘œ 선택할 수 있게 됨
  •  querySelectorAll()은 인자둜 μ§€μ •ν•œ μ„ νƒμžμ™€ μΌμΉ˜ν•˜λŠ” μš”μ†Œλ“€μ„ λͺ¨λ‘ μ„ νƒν•˜λŠ” λ‹€μˆ˜μ˜ μš”μ†Œλ“€μ„ λ°°μ—΄μ²˜λŸΌ κ°€μ Έμ˜€κΈ°μœ„ν•΄ μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œ
const title = document.querySelector('title');
const title = document.querySelector('#title');
const title = document.querySelector('.title_class');

console.log(title);
  • 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  μš”μ†Œλ“€μ„ 마치 λ°°μ—΄μ²˜λŸΌ λ¦¬ν„΄ν•˜κ²Œ 

πŸ“± HTML μš”μ†Œμ˜ 속성을 λ³€κ²½ν•˜λŠ” 방법

  • μ„ νƒν•œ μš”μ†Œμ˜ 속성 κ°’μ΄λ‚˜ μŠ€νƒ€μΌ 등을 λ³€κ²½ν•˜λŠ” 방법에 λŒ€ν•΄μ„œ 
  • innerTextλ₯Ό μ‚¬μš©ν•˜μ—¬ 기쑴에 μ£Όμ—ˆλ˜ 값을 λ³€κ²½
  • style.colorλ₯Ό μ‚¬μš©ν•˜μ—¬ 폰트의 색상을 λ³€κ²½

πŸ“± HTMLElement

  • html Element 객체가 κ°€μ§€κ³  μžˆλŠ” ν•˜λ‚˜μ˜ ν”„λ‘œνΌν‹°μ΄κ³  html λͺ¨λ“  μš”μ†Œλ“€μ΄ html ElementλΌλŠ” 객체λ₯Ό 상속받고 있기 λ•Œλ¬Έμž„
  • html Elementκ°€ κ°€μ§€κ³  μžˆλŠ” ν”„λ‘œν¬νŠΈλŠ” λ‹€μ–‘

πŸ“± createElement()β€Š

  • μƒˆλ‘œμš΄ μš”μ†Œλ₯Ό μƒμ„±ν•΄μ„œ html λ¬Έμ„œμ— μΆ”κ°€ν•˜λŠ” 방법
  • 인자 κ°’μœΌλ‘œ μƒμ„±ν•˜λ €λŠ” μš”μ†Œμ˜ νƒœκ·Έλ₯Ό λ¬Έμžμ—΄λ‘œ μ „λ‹¬ν•˜λ©΄ 됨
  • μƒμ„±λœ μš”μ†ŒλŠ” λ™μΌν•œ νƒœκ·Έ μš”μ†Œλ₯Ό μ„ νƒν•œ 것과 κ°™μŒ
  • html Element 객체λ₯Ό 상속받기 λ•Œλ¬Έμ— innerTextλ‚˜ style 같은 ν”„λ‘œνΌν‹°λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°’μ΄λ‚˜ μŠ€νƒ€μΌ 등을 μ‘°μž‘ν•  수 있 음
  • μ΄λ ‡κ²Œ μƒμ„±ν•œ μš”μ†Œλ₯Ό μ‹€μ œ λ¬Έμ„œμ— μΆ”κ°€ν•΄μ£Όμ§€ μ•ŠμœΌλ©΄ 보이지 μ•ŠμŒ
  • λ¬Έμ„œμ— μΆ”κ°€ν•΄μ£ΌκΈ° μœ„ν•΄μ„œλŠ” 기쑴의 λ¬Έμ„œμ— μžˆλŠ” μ–΄λ–€ μš”μ†Œλ₯Ό κ°€μ Έμ˜¨ λ‹€μŒμ— κ·Έ μš”μ†Œλ₯Ό λΆ™μ—¬μ£ΌλŠ” κ³Όμ • ν•„μš”
  • appendChild λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ 인자둜 μš°λ¦¬κ°€ μƒμ„±ν•œ 타이틀을 전달을 ν•΄μ£Όκ²Œ 되면 μƒˆλ‘œ μƒμ„±ν•œ μš”μ†Œκ°€ λ¬Έμ„œμ— 좜λ ₯이 됨
const title = document.createElement('h1');
const body = document.querySelector('body');

title.innerText = 'μƒˆλ‘œμš΄ μΉœκ΅¬μ—μš”!';
title.style.color = 'red';

body.appendChild(title);