본문 바로가기
프로그래밍/자바스크립트

16 노드(node)

by 윤지(●'◡'●) 2021. 7. 9.
반응형


노드(node)

 

▪ HTML DOM은 노드라고 불리는 계층적 단위에 정보를 저장하고 있다.
▪ HTML DOM은 이러한 노드들을 정의하고, 그들 사이의 관계를 설명해 주는 역할을 한다.

▪ HTML 문서의 정보는 노드 트리(node tree)라고 불리는 계층적 구조에 저장된다.

▪ 이러한 노드 트리는 노드들의 집합이며, 노드 간의 관계를 보여준다.

 

 

노드의 종류

 

HTML 문서를 구성하는 대표적인 노드의 종류는 아래와 같다.

 

노드명 설명
문서노드(document node) 문서 전체를 나타내는 노드
요소노드(element node) HTML요소는 요소 노드이며, 속성  노드를 가질 수 있는 유일한 노드 
속성노드(attribute node) HTML요소의 속성은 속성 노드 이며, 요소 노드에 관한 정보를 가지고 있음
텍스트노트(text node) HTML문서의 모든 텍스트는 텍스트 노드
주석노드(comment node) 모든 주석은 주석 노드

 

 

노드간의 관계

 

관계 설명
parentNode 부모 노드
childNodes 자식 노드 리스트
firstChild 첫번쨰 자식 노드
lastChild 마지막 자식 노드
nextSibling 다음 형제 노드
previousSibling 이전 형제 노드

 

 

노드의 관리

 

1. 노드 추가

메소드명 설명
appendChild() 새로운 노드를 해당 노드의 자식 노드 리스트 맨 마지막에 추가
insertBefore() 새로우 노드를 특정 자식 노드 바로 앞에 추가
insertDate() 새로운 노드를 텍스트 데이터에 새로운 텍스트로 추가

 

[예시]

<script>
        'use strict';
        //1.appendChild
        const appendNode = function(){
            const parent = document.getElementById('list');
            const newItem = document.getElementById('item1'); 
            parent.appendChild(newItem); // parent의 자식노드 맨마지막에 newItem 추가
        }
        //2.insertBefore
        const insertNode = function(){
            const parent = document.getElementById('list');
            const backend = document.getElementById('backend');
            const newItem = document.getElementById('item2');
            parent.insertBefore(newItem,backend); // newItem을 backend 앞에 추가
        }
        //3.insertData
        const appendText = function(){
            const text = document.getElementById('text').firstChild;
            text.insertData(7,"아주 피곤한 "); //text의 7번째 자리에 "아주 피곤한" 추가
        }
</script>
<body>
    <h2>노드의 추가</h2>
    <p id="item1">JavaScript</p>
    <p id="item2">TypeScript</p>
    <hr/>
    <div id="list">
        <p id="backend">node.js</p>
        <p>HTML</p>
        <p>CSS</p>
    </div>
    <hr/>
    <p id="text">지금 시간은 오후 3시 14분 입니다.</p>
    <hr/>
    <button onclick="appendNode()">노드추가1</button>//버튼이 클릭되면 appendNode() 메소드 실행
    <button onclick="insertNode()">노드추가2</button>//버튼이 클릭되면 insertNode() 메소드 실행
    <button onclick="appendText()">텍스트추가</button>//버튼이 클릭되면 appendText() 메소드 실행
</body>

 

[결과]

노드의 추가

노드의 추가

JavaScript

TypeScript


node.js

HTML

CSS


지금 시간은 오후 3시 14분 입니다.


 

 

 

 

 

 

 

 

2. 노드 생성

메소드명 설명
createElement() 새로운 요소 노드를 만듬
createAtrribute() 새로운 속성 노드를 만듬
createTextNode() 새로운 텍스트 노드를 만듬

 

[예시]

<script>
        'use strict';
        const createNode = function(){
            const elNode = document.getElementById('el');
            const newNode = document.createElement('p'); //<p></p>
            newNode.innerHTML = '<b>🎃새로운 요소🎃</b>'//<p><b>🎃새로운 요소🎃</b></p>
            document.body.insertBefore(newNode, elNode);
            //부모인 body안에 들어있는 elNode앞에 newNode을 추가 
        }
        const createAtrr = function(){
            const attr = document.getElementById('attr');
            const newAttr = document.createAttribute('style'); //style = ""
            newAttr.value = 'color: deepskyblue; background-color:gold;'; //style = "color : deepskyblue"
            attr.setAttributeNode(newAttr);
            //<p id="attr" style = "color : deepskyblue"; background-color:gold;>이 단락에 새로운 속성이 추가됩니다.</p>
        }

        const createText = function(){
            const textNode = document.getElementById('text'); //<p id="text"></p>
            const newText = document.createTextNode('🎁🥞🍰🎁🥞🍰');
            textNode.appendChild(newText); //<p id="text">🎁🥞🍰🎁🥞🍰</p>
        }
    </script>
<body>
    <h2>노드의 생성</h2>
    <p id="el">새로운 문장이 이 문장 앞에 추가됩니다.</p>
    <p id="attr">이 단락에 새로운 속성이 추가됩니다.</p>
    <p id="text"></p>

    <button onclick='createNode()'>요소 노드 생성</button>
    <button onclick='createAtrr()'>속성 노드 생성</button>
    <button onclick='createText()'>텍스트 노드 생성</button>
</body>

[결과]

노드의 생성

노드의 생성

새로운 문장이 이 문장 앞에 추가됩니다.

이 단락에 새로운 속성이 추가됩니다.

 

 

 

 

 

3. 노드 제거

메소드명 설명
removeChild() - 자식 노드 리스트에서 특정 자식 노드를 제거
- 성공적으로 노드가 제거되면 노드를 반환
- 노드가 제거될 때에는 제거되는 노드의 모든 자식들도 다 같이 제거됨

 

[예시]

<script>
        'use strict';
        const removeNode = function(){
            const parent = document.getElementById('list');
            const removeItem = document.getElementById('item');
            const result = parent.removeChild(removeItem); //list에서 item이 id인 요소 삭제
            console.log(result);
        }

        const removeAttr = function(){
            const js = document.getElementById('js'); 
            js.removeAttribute('style'); //id가 js인 요소들 중에서 style 속성 제거
        }
</script>
<body>
    <h2>노드 제거</h2>
    <div id="list">
        <p>HTML</p>
        <p id="item">CSS</p>
        <p id="js" style="background-color: gold; color: deeppink;">JavaScript</p>
    </div>
    <button onclick="removeNode()">요소 노드 삭제</button>
    <button onclick="removeAttr()">속성 노드 삭제</button>
</body>

 

[결과]

노드 제거

노드 제거

HTML

CSS

JavaScript

 

 

 

4. 노드 복제

메소드명 설명
cloneNode() 기존의 존재하는 노드와 동일한 새로운 노드를 생성하고 반환

 

복제할노드.cloneNode(자식노드복제여부);

 

true : 복제되는 노드의 모든 속성과 자식노드도 같이 복제
false : 속성 노드만 복제하고 자식 노드를 복제하지 않음

 

 

[예시]

<script>
        'use strict';
        const cloneElement = function(){
            const parent = document.getElementById('list');
            const originItem = document.getElementById('item');
            parent.appendChild(originItem.cloneNode(true));
        }
</script>
<body>
    <h2>노드 복제</h2>
    <h3 id="item">복제된 아이템</h3>
    <div id="list">
        <p>HTML</p>
        <p>CSS</p>
        <p>JavaScript</p>
        <p>node.js</p>
    </div>
    <button onclick="cloneElement()">노드복제</button>
</body>

 

[결과]

노드 복제

노드 복제

복제된 아이템

HTML

CSS

JavaScript

node.js

 

 


열심히 공부하고 있지만, 오류 사항이 존재 할 수 있습니다.

수정 사항이 존재 할 경우 알려주시면 감사하겠습니다 <(__)>

반응형

댓글