문자열로 노드 제어

innerHTML

  • 문자열로 자식 노드를 만들 수 있는 기능을 제공.

  • 자식 노드의 값을 읽어올 수도 있음

<!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>banana</li>
    <li>apple</li>
  </ul>
  <input type="button" value="get" onclick="fn_getInnerHtml()">
  <input type="button" value="set" onclick="fn_setInnerHtml()">
  
  <script>
    function fn_getInnerHtml() {
      var target = document.getElementById('target');
      
      // html 반환
      alert(target.innerHTML);
    }
    
    function fn_setInnerHtml() {
      var target = document.getElementById('target');
      
      // html 변경
      target.innerHTML = '<li>mango</li><li>berry</li>'
    }
  </script>
</body>
</html>

outerHTML

  • 선택한 엘리먼트를 포함해서 처리됨

<!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>banana</li>
    <li>apple</li>
  </ul>
  <input type="button" value="get" onclick="fn_getInnerHtml()">
  <input type="button" value="set" onclick="fn_setInnerHtml()">
  
  <script>
    function fn_getInnerHtml() {
      var target = document.getElementById('target');
      
      // html 반환(자신 포)
      alert(target.outerHTML);
    }
    
    function fn_setInnerHtml() {
      var target = document.getElementById('target');
      
      // html 변경(자신 포)
      target.outerHTML = '<ul id="target"><li>mango</li><li>berry</li></ul>'
    }
  </script>
</body>
</html>

innerText / outerText

  • 값을 읽을 때는 HTML코드를 제외한 문자열을 리턴하고, 값을 변경할 때는 HTML의 코드를 그대로 문자열로 추가함

<!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>apple</li>
    <li>banana</li>
    <li>orange</li>
  </ul>
  <input type="button" value="get" onclick="fn_getText()" />
  <input type="button" value="set" onclick="fn_setText()" />
  
  <script>
    var target = document.getElementById('target');
    
    // html 태그를 제외한 문자열만 반환
    // inner : 자식들의 텍스트 노드들만, outer : 자신의 텍스트 노드까지
    function fn_getText() {
      alert(target.innerText);
    }
    
    // html태그를 문자열로 그대로 변경
    // inner : 자식의 텍스트 노드 변경, outer : 자신의 노드까지 변경
    function fn_setText() {
      target.innerText = '<li>HTML</li><li>CSS</li>';
    }
  </script>
</body>
</html>

insetAdJacentHTML

  • 조금더 세밀한 노드 추가가 가능

  • beforebegin : 선택한 요소가 시작되기전 위쪽(이전 형제요소)에 추가

  • afterbegin : 선택한 요소가 시작한 바로 다음(첫번째 자식요소)에 추가

  • beforeend : 선택한 요소가 끝나기 직전(마지막 자식요소)에 추가

  • afterend : 선택한 요소가 끝나고 바로 다음(다음 형제요소)에 추가

<!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>Content</li>
  </ul>
  
  <input type="button" value="beforebegin" onclick="fn_beforebegin()">
  <input type="button" value="afterbegin" onclick="fn_afterbegin()">
  <input type="button" value="beforeend" onclick="fn_beforeend()">
  <input type="button" value="afterend" onclick="fn_afterend()">
  
  <script>
    var target = document.querySelector('ul');
    var num = 1;
    
    function fn_beforebegin() {
      target.insertAdjacentHTML('beforebegin', '<h2>BeforeBegin' + num++ + '</h2>'); 
    }
    
    function fn_afterbegin() {
      target.insertAdjacentHTML('afterbegin', '<li>afterbegin' + num++ + '</li>'); 
    }
    
    function fn_beforeend() {
      target.insertAdjacentHTML('beforeend', '<li>beforeend' + num++ + '</li>'); 
    }
    
    function fn_afterend() {
      target.insertAdjacentHTML('afterend', '<h2>afterbegin' + num++ + '</h2>'); 
    }
  </script>
</body>
</html>

Last updated

Was this helpful?