λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Javascript

μš”μ†Œ 선택 방법 (DOM)

by oranssy 2022. 8. 6.
728x90
λ°˜μ‘ν˜•

⭐️ μš”μ†Œ 선택방법 (DOM) ⭐️


01. DOM (Document Object Model) λ¬Έμ„œ 객체 λͺ¨λΈ

HTML λ¬Έμ„œ λ‚΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό 각각의 객체둜 μ •μ˜ν•˜μ—¬, 각각의 μš”μ†Œμ— μ ‘κ·Όν•˜λŠ” 방법을 μ œκ³΅ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
HTML λ¬Έμ„œμ™€ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ—°κ²°ν•΄μ£ΌλŠ” ν†΅μ—­μ‚¬μ˜ 역할을 ν•©λ‹ˆλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” DOM 을 톡해 HTML λ¬Έμ„œμ˜ 각 μš”μ†Œμ— μ ‘κ·Όν•  수 있고, 이λ₯Ό 톡해 HTML λ¬Έμ„œμ˜ μš”μ†Œλ₯Ό 생성, λ³€ν˜•, μ‚­μ œν•˜λŠ” λ“±μ˜ μ›Ή νŽ˜μ΄μ§€ μ œμ–΄κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
DOM 은 document 객체의 집합이며, 객체의 λΆ€μžκ΄€κ³„λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 트리 ꡬ쑰둜 ν‘œν˜„λ©λ‹ˆλ‹€.

   ___ μ°Έκ³ ν•˜κΈ° ___
  1)   μΈν„°νŽ˜μ΄μŠ€ (interface) λŠ” μ„œλ‘œ λ‹€λ₯Έ 두 μ‹œμŠ€ν…œμ΄ 정보λ₯Ό κ΅ν™˜ν•˜λŠ” 경우의 접점 λ˜λŠ” 경계면을 μ˜λ―Έν•©λ‹ˆλ‹€.
  2)   ' λ¬Έμ„œ 객체 'λŠ” HTML λ¬Έμ„œμ˜ νƒœκ·Έλ“€μ„ μžλ°”μŠ€ν¬λ¦½νŠΈ (Javascript) κ°€ μ΄μš©ν•  수 μžˆλ„λ‘ λ§Œλ“  객체λ₯Ό λ§ν•©λ‹ˆλ‹€.
  3)   DOM 은 BOM (Browser Object Model) μ€‘μ˜ ν•˜λ‚˜λ‘œ, BOM 의 μ΅œμƒμœ„ 객체인 ' Window 객체 '의 ν•˜μœ„ 객체 μž…λ‹ˆλ‹€.
  4)   Text ν˜•μ‹μ˜ HTML λ¬Έμ„œλ₯Ό λΈŒλΌμš°μ €μ— λ Œλ”λ§ ν•˜λ €λ©΄, HTML λ¬Έμ„œλ₯Ό λΈŒλΌμš°μ €κ°€ 이해할 수 μžˆλŠ” ꡬ쑰(DOM)둜 λ©”λͺ¨λ¦¬μ— μ˜¬λ €μ•Ό ν•©λ‹ˆλ‹€.
      μ—¬κΈ°μ„œ λ Œλ”λ§μ€ 논리적인 λ¬Έμ„œμ˜ ν‘œν˜„μ‹μ„ κ·Έλž˜ν”½ ν‘œν˜„μ‹μœΌλ‘œ λ³€ν˜•μ‹œν‚€λŠ” 과정을 λ§ν•©λ‹ˆλ‹€.
      λ Œλ”λ§μ€ DOM μš”μ†Œμ™€ μŠ€νƒ€μΌμ— κΈ°λ°˜μ„ λ‘” λ ˆμ΄μ•„μ›ƒμ„ κ³„μ‚°ν•˜κ³ , κ³„μ‚°λœ μš”μ†Œλ₯Ό 화면에 ν‘œν˜„ν•˜λŠ” κ³Όμ •μœΌλ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.
  5)   λ¬Έμ„œ 객체 μƒμ„±μ˜ μ’…λ₯˜
      - 정적 생성 : HTML λ¬Έμ„œμ— νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 직접 μž‘μ„±ν•˜μ—¬ μƒμ„±ν•©λ‹ˆλ‹€.
      - 동적 생성 : HTML νŽ˜μ΄μ§€μ— μ—†λ˜ λ¬Έμ„œ 객체λ₯Ό Javascript λ₯Ό μ΄μš©ν•˜μ—¬ μƒμ„±ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.

[1] λ…Έλ“œ (node)

DOM μ—μ„œ κ°μ²΄ν™”ν•œ 각각의 객체λ₯Ό λ§ν•˜λ©°, 정보λ₯Ό μ €μž₯ν•œ 계측적 λ‹¨μœ„λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€ .
<head>, <body>, <title>, <script>, <h1> λ“±μ˜ νƒœκ·Έ μš”μ†Œ 뿐만 μ•„λ‹ˆλΌ, νƒœκ·Έ μ•ˆμ˜ ν…μŠ€νŠΈλ‚˜ 속성도 각각의 λ…Έλ“œ μž…λ‹ˆλ‹€.
νƒœκ·Έ μš”μ†ŒλŠ” ' μš”μ†Œ λ…Έλ“œ ', ν…μŠ€νŠΈλ₯Ό ' ν…μŠ€νŠΈ λ…Έλ“œ '라고 λ§ν•©λ‹ˆλ‹€.
각 λ…Έλ“œλŠ” λΆ€λͺ¨-μžμ‹ κ΄€κ³„λ‘œ μ—°κ²° λ˜μ–΄ 있으며, 뢀속 λ…Έλ“œλ₯Ό κ°€μ§€λŠ” λ…Έλ“œλ₯Ό λΆ€λͺ¨ λ…Έλ“œλΌκ³  ν•˜κ³  λΆ€λͺ¨μ— μ†ν•˜λŠ” 뢀속 λ…Έλ“œλ₯Ό μžμ‹ λ…Έλ“œλΌκ³  ν•©λ‹ˆλ‹€.

[2] 트리(tree) ꡬ쑰

HTML λ¬Έμ„œμ˜ 정보가 μ €μž₯λ˜λŠ” DOM 의 계측적 μ—°κ²° ꡬ쑰λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
μ΅œμƒμœ„μ˜ 뿌리λ₯Ό κΈ°μ€€μœΌλ‘œ μ•„λž˜λ‘œ 가지λ₯Ό λ»—μ–΄λ‚˜κ°€λŠ” λ‚˜λ¬΄ λͺ¨μ–‘μœΌλ‘œ ν‘œν˜„λ©λ‹ˆλ‹€.

02. μš”μ†Œ 선택방법

μš”μ†ŒλŠ” μ„ νƒμžλ₯Ό ν†΅ν•΄μ„œ λΆˆλŸ¬μ˜€λŠ”λ°, μš”μ†Œλ₯Ό μ„ νƒν•˜λŠ” 방법 (μ ‘κ·Ό 방법)은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

[1] μš”μ†Œλ₯Ό 직접 μ„ νƒν•˜λŠ” λ©”μ„œλ“œ

   ___ μ°Έκ³ ν•˜κΈ° ___
  1)   λ©”μ„œλ“œ (method) λŠ” μ–΄λ–€ 객체가 가지고 μžˆλŠ” λ™μž‘μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
      μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” 객체 μ•ˆμ— ν”„λ‘œνΌν‹°(property)둜 μ •μ˜λœ ν•¨μˆ˜λ₯Ό λ©”μ„œλ“œλΌκ³  λ§ν•©λ‹ˆλ‹€.

λ©”μ„œλ“œ μ„€λͺ…
getElementById( ) document.getElementById('content') 일 경우, HTML μš”μ†Œ μ€‘μ—μ„œ id 속성이 'content'인 μš”μ†Œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
getElementByClassName( ) document.getElementByClassName('menu') 일 경우, HTML μš”μ†Œ μ€‘μ—μ„œ class λͺ…이 'menu' 인 μš”μ†Œλ“€μ„ μ„ νƒν•©λ‹ˆλ‹€.
getElementByClassName( ) document.getElementByClassName('ul') 일 경우, HTML μš”μ†Œ μ€‘μ—μ„œ νƒœκ·Έ λͺ…이 'ul' 인 μš”μ†Œλ“€μ„ μ„ νƒν•©λ‹ˆλ‹€.
querySelecter( ) μš”μ†Œμ˜ 선택 방법이 css 선택 방법과 λ™μΌν•©λ‹ˆλ‹€. μ„ νƒλœ μš”μ†Œ μ€‘μ—μ„œ 첫번 μ¨° μš”μ†Œλ§Œ μ„ νƒν•©λ‹ˆλ‹€.
document.querySelecter('.lnb')
document.querySelecter(div)
document.querySelecter('#gnb li')
querySelecterAll( ) querySelecter( ) λŠ” μ„ νƒλœ μš”μ†Œ 쀑 첫 번쨰 μš”μ†Œλ§Œ μ„ νƒν•˜λŠ” 반면, querySelecterAll( ) λŠ” λͺ¨λ“  μš”μ†Œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

# μš”μ†Œ 선택 λ©”μ„œλ“œμ˜ 예

<!DOCTYPE html>
    <html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>μš”μ†Œλ₯Ό 직접 μ„ νƒν•˜λŠ” λ©”μ„œλ“œ</title>
        <script>
            window.onload = function() {
                var list1 = document.querySelector('#box1 > ul > li');
                var list2 = document.querySelectorAll('#box2 > ul > li');
                console.log(list1);
                console.log(list2);
            };
        </script>
    </head>
    <body>
        <div id="box1">
            <ui>
                <li>λ‚΄μš©1</li>
                <li>λ‚΄μš©2</li>
                <li>λ‚΄μš©3</li>
            </ui>
        </div>
        <div id="box2">
            <ui>
                <li>λ‚΄μš©4</li>
                <li>λ‚΄μš©5</li>
                <li>λ‚΄μš©6</li>
            </ui>
        </div>
    </body>
    </html>

document.querySelectorAll( )둜 μš”μ†Œλ₯Ό μ„ νƒν–ˆμ„ 경우, λͺ¨λ“  μš”μ†Œκ°€ μ„ νƒλ˜μ§€ λ•Œλ¬Έμ— λ³€μˆ˜μ— λ°°μ—΄λ‘œ μ €μž₯λ©λ‹ˆλ‹€.

[2] μƒλŒ€ μœ„μΉ˜λ‘œ μ„ νƒν•˜λŠ” 방법

μ„ νƒν•œ μš”μ†Œμ˜ ν˜„μž¬ μœ„μΉ˜λ₯Ό κΈ°μ€€μœΌλ‘œ μš”μ†Œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

속성 κ°’ 속성 μ„€λͺ…
parentNode μ„ νƒλœ μš”μ†Œμ˜ λΆ€λͺ¨ λ…Έλ“œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
childNodes μ„ νƒλœ μš”μ†Œμ˜ μžμ‹ λ…Έλ“œλ“€(μš”μ†Œ λ…Έλ“œ, ν…μŠ€νŠΈ λ…Έλ“œ)λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
children μ„ νƒλœ μš”μ†Œμ˜ μžμ‹ λ…Έλ“œλ“€(μš”μ†Œ λ…Έλ“œ)λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
childNodes λŠ” 'μ—”ν„°(enter)' 도 빈 문자(text)둜 μΈμ‹ν•˜μ—¬ μžμ‹ λ…Έλ“œλ‘œ μ·¨κΈ‰ν•˜μ§€λ§Œ, children 은 μ—”ν„°λ₯Ό μžμ‹ λ…Έλ“œλ‘œ μ·¨κΈ‰ν•˜μ§€ μ•ŠλŠ” 차이점이 μžˆμŠ΅λ‹ˆλ‹€.
nextSibling μ„ νƒλœ μš”μ†Œμ˜ 이전 ν˜•μ œ λ…Έλ“œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
previousSibling μ„ νƒλœ μš”μ†Œμ˜ λ‹€μŒ ν˜•μ œ λ…Έλ“œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
firstChild μ„ νƒλœ μš”μ†Œμ˜ μžμ‹ λ…Έλ“œ 쀑 첫 번쨰 λ…Έλ“œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
lastChild μ„ νƒλœ μš”μ†Œμ˜ μžμ‹ λ…Έλ“œ 쀑 λ§ˆμ§€λ§‰ λ…Έλ“œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
tagName μ„ νƒλœ μš”μ†Œμ˜ νƒœκ·Έλͺ…을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
nodeValue μ„ νƒλœ μš”μ†Œμ˜ Value 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
nodeType μ„ νƒλœ μš”μ†Œμ˜ νƒ€μž…μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.
λ°˜ν™˜ 값이 1 이면 μš”μ†Œ, 2 이면 속성, 3 이면 ν…μŠ€νŠΈ λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
id μ„ νƒλœ μš”μ†Œμ˜ id 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
className μ„ νƒλœ μš”μ†Œμ˜ class 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
728x90
λ°˜μ‘ν˜•

'Javascript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

λ‚΄μž₯ ν•¨μˆ˜  (3) 2022.08.16
λ°°μ—΄ 객체 (1)  (2) 2022.08.12
지역 / μ „μ—­ λ³€μˆ˜  (3) 2022.08.06
ν•¨μˆ˜  (7) 2022.07.27
데이터 μœ ν˜•  (7) 2022.07.27

λŒ“κΈ€