노드의 변경

노드를 추가, 제거, 변경하는 방법

노드 추가

  • appendChild(child) : 노드의 마지막 자식으로 주어진 엘리먼트를 추가

  • insertBefore(newElement, referenceElement) : 두번째 인자로 전달한 엘리먼트 앞에 새로운 엘리먼트 추가

  • 노드를 추가하기 위해서는 추가할 엘리먼트를 생성해야하는데 이것은 document 객체의 기능임

    • document.createElement(tagname) : 엘리먼트 노드 생성

    • document.createTextNode(data) : 텍스트 노드 생성

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title></title>
</head>
<body>
   <ul id="target">
     <li>HTML</li>
     <li>CSS</li>
   </ul>
  <input type="button" onclick="fn_appendChild();" value="appendChild()">
  <input type="button" onclick="fn_insertBefore();" value="insertBefore()">
  
  <script>
    function fn_appendChild() {
      var target = document.getElementById('target');
      
      // li 엘리먼트 노드 생성
      var li = document.createElement('li');
      // 텍스트 노드 생성
      var text = document.createTextNode('JavaScript');
      // li노드의 텍스트노드 삽입
      li.appendChild(text);
      
      // ul에 하위 자식으로 마지막에 새로 만든 li노드 추가
      target.appendChild(li);
    }
    function fn_insertBefore() {
      var target = document.getElementById('target');
      
      var li = document.createElement('li');
      var text = document.createTextNode('JavaScript');
      li.appendChild(text);
      
      // ul에 하위 자식으로 첫번째 자식의 앞에 새로 만든 li노드 추가
      target.insertBefore(li, target.firstChild);
    }
  </script>
</body>
</html>

노드 제거

  • removeChild(child) : 메소드는 삭제 대상의 부모 노드의 객체의 것을 실행해야 함

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title></title>
</head>
<body>
  <h2>리스트 클릭시 삭제</h2>
  <ul>
    <li onclick="fn_removeNode(this)">HTML</li>
    <li onclick="fn_removeNode(this)">CSS</li>
    <li onclick="fn_removeNode(this)">JAVASCRIPT</li>
  </ul>
  
  <script>
    function fn_removeNode(self) {
      // 삭제할 노드의 부모 노드에서 실행해야함    
      self.parentNode.removeChild(self);
    }
  </script>
</body>
</html>

노드 변경

  • replacChild(newChild, oldChild) : 자식 노드를 변경하는 메소드

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title></title>
</head>
<body>
  <ul>
    <li>HTML</li>
    <li>CSS</li>
    <li id="target">Javascript</li>
  </ul>
  <input type="button" value="changeA" onclick="fn_changeNode()">
  
  <script>
    function fn_changeNode() {
      var target = document.getElementById('target');
      
      var li = document.createElement('li');
      var a = document.createElement('a');
      a.setAttribute('href', 'https://www.naver.com/');
      var text = document.createTextNode('change!!');
      
      a.appendChild(text);
      li.appendChild(a);
      
      target.parentNode.replaceChild(li, target);
    }
  </script>
</body>
</html>

Last updated

Was this helpful?