λ©”μ„œλ“œλ‘œ DOM μ‘°μž‘ν•΄μ„œ λ¬Έμ„œ μˆ˜μ •ν•˜κΈ°

2025. 9. 22. 23:39ㆍFront-end/JavaScript

λ°˜μ‘ν˜•

λͺ©μ°¨

1. λ©”μ„œλ“œλ‘œ λ¬Έμ„œ μˆ˜μ •ν•˜κΈ°

    1-1. μš”μ†Œ(Element), λ…Έλ“œ(Node) 생성

    1-2. μš”μ†Œ μ‚½μž…

    1-3. HTML λ¬Έμžμ—΄ μ‚½μž…

    1-4. μ‚­μ œ

    1-5. 볡제

    1-6. DocumentFragment μ‚¬μš©

2. μŠ€νƒ€μΌ μ μš©ν•˜κΈ°


1. λ©”μ„œλ“œλ‘œ λ¬Έμ„œ μˆ˜μ •ν•˜κΈ°

λ©”μ„œλ“œλ‘œ μš”μ†Œλ₯Ό μƒμ„±ν•˜κ³  μˆ˜μ •ν•˜λŠ” 방법듀을 μ•Œμ•„λ³΄μž.

 

1. μš”μ†Œ(Element), λ…Έλ“œ(Node) 생성

document.createElement(tag)

μƒˆλ‘œμš΄ HTML μš”μ†Œ νƒœκ·Έλ₯Ό 생성

// 1. <div> μš”μ†Œ λ§Œλ“€κΈ°
let div = document.createElement('div');

// 2. λ§Œλ“  μš”μ†Œμ˜ 클래슀λ₯Ό 'alert'둜 μ„€μ •
div.className = "alert";

// 3. λ‚΄μš© μ±„μ›Œλ„£κΈ°
div.innerHTML = "<strong>μ•ˆλ…•ν•˜μ„Έμš”!</strong> μ€‘μš” λ©”μ‹œμ§€λ₯Ό ν™•μΈν•˜μ…¨μŠ΅λ‹ˆλ‹€.";

 

document.createTextNode(text)

ν…μŠ€νŠΈ λ…Έλ“œλ₯Ό μƒμ„±ν•œλ‹€

let textNode = document.createTextNode('μ•ˆλ…•ν•˜μ„Έμš”.');

 

2. μš”μ†Œ μ‚½μž…

node.append(λ…Έλ“œorλ¬Έμžμ—΄)

node의 λ§ˆμ§€λ§‰ μžμ‹μœΌλ‘œ μ‚½μž…

 

node.prepend(...)

λ…Έλ“œμ˜ 맨 μ•žμͺ½ μžμ‹μœΌλ‘œ μ‚½μž…

 

node.before(...), node.after(...)

νŠΉμ • μš”μ†Œμ˜ μ•žμ΄λ‚˜ 뒀에 μ‚½μž…

<ol id="ol">
  <li>0</li>
  <li>1</li>
  <li>2</li>
</ol>

<script>
  ol.before('before'); // <ol> μ•žμ— λ¬Έμžμ—΄ 'before'λ₯Ό μ‚½μž…ν•¨
  ol.after('after'); // <ol> 뒀에 λ¬Έμžμ—΄ 'afterλ₯Ό μ‚½μž…ν•¨

  let liFirst = document.createElement('li');
  liFirst.innerHTML = 'prepend';
  ol.prepend(liFirst); // <ol>의 첫 ν•­λͺ©μœΌλ‘œ liFirstλ₯Ό μ‚½μž…ν•¨

  let liLast = document.createElement('li');
  liLast.innerHTML = 'append';
  ol.append(liLast); // <ol>의 λ§ˆμ§€λ§‰ ν•­λͺ©μœΌλ‘œ liLastλ₯Ό μ‚½μž…ν•¨
</script>

 

node.replaceWith(...)

κΈ°μ‘΄ λ…Έλ“œλ₯Ό λ‹€λ₯Έ λ…Έλ“œ λ˜λŠ” λ¬Έμžμ—΄λ‘œ ꡐ체

 

3. HTML λ¬Έμžμ—΄ μ‚½μž…

eleminsertAdjacentHTML(whenre, html)

λ¬Έμžμ—΄ ν˜•νƒœμ˜ HTML을 νƒœκ·Έ κ·ΈλŒ€λ‘œ μ‚½μž…

 

insertAdjacentText, insertAdjacentElement

HTML νŒŒμ‹± μ•ˆν•˜κ³  ν…μŠ€νŠΈ or μš”μ†Œ μ‚½μž…

<div id="div"></div>
<script>
  div.insertAdjacentHTML('beforebegin', '<p>μ•ˆλ…•ν•˜μ„Έμš”.</p>');
  div.insertAdjacentHTML('afterend', '<p>μ•ˆλ…•νžˆ κ°€μ„Έμš”.</p>');
</script>

4. μ‚­μ œ

node.remove()

ν•΄λ‹Ή λ…Έλ“œλ₯Ό λ¬Έμ„œμ—μ„œ 제거

<script>
  let div = document.createElement('div');
  div.className = "alert";
  div.innerHTML = "<strong>μ•ˆλ…•ν•˜μ„Έμš”!</strong> μ€‘μš” λ©”μ‹œμ§€λ₯Ό ν™•μΈν•˜μ…¨μŠ΅λ‹ˆλ‹€.";

  document.body.append(div);
  setTimeout(() => div.remove(), 1000);
</script>

5. 볡제

elem.cloneNode(deep)

μš”μ†Œλ₯Ό 볡제. (deep=true)일 경우 μžμ‹ μš”μ†Œλ“€κΉŒμ§€ 볡제

<script>
  let div2 = div.cloneNode(true); // λ©”μ‹œμ§€ μ°½ 볡제
  div2.querySelector('strong').innerHTML = 'μ•ˆλ…•νžˆ κ°€μ„Έμš”!'; // λ³΅μ œν•œ λ©”μ‹œμ§€ μ°½ λ‚΄μš© μˆ˜μ •

  div.after(div2); // λ³΅μ œν•œ λ©”μ‹œμ§€ 창을 κΈ°μ‘΄ λ©”μ‹œμ§€ μ°½ λ‹€μŒμ— λ³΄μ—¬μ€Œ
</script>

6. DocumentFragment μ‚¬μš©

DocumentFragment

μ—¬λŸ¬ λ…Έλ“œλ₯Ό ν•œλ¬ΆμŒμœΌλ‘œ 묢어두고, λ¬Έμ„œμ— μ‚½μž…ν•  λŒ€ 효율적으둜 μ‚½μž…

<script>
function getListContent() {
  let fragment = new DocumentFragment();

  for(let i=1; i<=3; i++) {
    let li = document.createElement('li');
    li.append(i);
    fragment.append(li);
  }

  return fragment;
}

ul.append(getListContent()); // (*)
</script>

 


2. μŠ€νƒ€μΌ μ μš©ν•˜κΈ°

μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ HTML μš”μ†Œμ˜ μŠ€νƒ€μΌμ„ λ³€κ²½ν•  수 μžˆλ‹€.

1) CSS에 클래슀λ₯Ό μ •μ˜ν•˜κ³ , μš”μ†Œμ— 클래슀λ₯Ό λΆ™μ΄κ±°λ‚˜

2) μš”μ†Œμ˜ style μ†μ„±μœΌλ‘œ 직접 μŠ€νƒ€μΌμ„ μ§€μ •ν•  수 μžˆλ‹€.

 

ν•˜μ§€λ§Œ κ°€λŠ₯ν•˜λ©΄ 클래슀 λ°©μ‹μœΌλ‘œ ν•˜λŠ” 것이 μœ μ§€λ³΄μˆ˜μ— 더 μ’‹λ‹€.

 

className

μš”μ†Œμ˜ 클래슀 전체λ₯Ό λ¬Έμžμ—΄λ‘œ μ·¨κΈ‰

<body class="main page">
  <script>
    alert(document.body.className); // main page
  </script>
</body>

 

classList

클래슀 ν•˜λ‚˜λ§Œ μΆ”κ°€/제거/ν† κΈ€ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•œλ‹€

<body class="main page">
  <script>
    for (let name of document.body.classList) {
      alert(name); // mainκ³Ό pageκ°€ 좜λ ₯됨
    }
  </script>

 

style ν”„λ‘œνΌν‹°

μš”μ†Œμ˜ 인라인 μŠ€νƒ€μΌμ„ μ‘°μž‘ν•  λ•Œ μ‚¬μš©

// μ˜ˆμ‹œλ₯Ό μ‹€ν–‰ν•˜λ©΄ νŽ˜μ΄μ§€μ˜ <body>κ°€ 깜빑거림
document.body.style.display = "none"; // hide

setTimeout(() => document.body.style.display = "", 1000); // 1초 ν›„ λ‹€μ‹œ μ›λž˜ μƒνƒœλ‘œ λŒμ•„μ˜΅λ‹ˆλ‹€.

 

style.cssText

μš”μ†Œμ˜ style 속성 전체λ₯Ό ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ μ„€μ •ν•˜κ±°λ‚˜ 읽고 싢을 λ•Œ μ‚¬μš©

<div id="div">λ²„νŠΌ</div>

// cssTextλ₯Ό μ‚¬μš©ν•˜λ©΄ 'important' 같은 κ·œμΉ™λ„ μ„€μ •ν•  수 있음
<script>
  div.style.cssText=`color: red !important;
    background-color: yellow;
    width: 100px;
    text-align: center;
  `;

  alert(div.style.cssText);
</script>

 

getComputedStyle(element, [pseudo])

μš”μ†Œμ— μ΅œμ’…μ μœΌλ‘œ 적용된 μŠ€νƒ€μΌμ„ μ½μ–΄μ˜¬ λ•Œ μ‚¬μš©ν•œλ‹€.

<head>
  <style> body { color: red; margin: 5px } </style>
</head>
<body>

  <script>
    let computedStyle = getComputedStyle(document.body);

    // 이제 λ§ˆμ§„κ³Ό 색 정보λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

    alert( computedStyle.marginTop ); // 5px
    alert( computedStyle.color ); // rgb(255, 0, 0)
  </script>

</body>

 

 

 

 

 

μ°Έκ³ 

λ°˜μ‘ν˜•