JavaScript

DOM 활용

9tun 2025. 3. 26. 20:10

DOM 트리와 노드 리스트

 

🎯 잠깐 복습

1. DOM Tree

웹 문서에서 각 요소의 포함관계를 나타낸 것

2. Node

가지가 갈라져 나가는 부분

3. Root Node

DOM Tree의 시작 부분

 

- 모든 HTML 태그는 요소(Element) Node임

- HTML 태그 텍스트 내용은 자식 노드인 text node가 됨

- HTML 태그 속성은 자식 노드인 attribute node가 됨

- 주석은 comment node

 

Node List

querySelectorAll()은 여러 DOM 노드들을 한 번에 선택해서 NodeList 형태로 반환합니다.

<body>
  <h1>노드 리스트 살펴보기</h1>
  <p>HTML</p>
  <p>CSS</p>
  <p>Javascript</p>
</body>

querySelectorAll로 Node List 반환 받아 사용하기

 


 

웹 문서에 새로운 노드 추가

click 하면 기존에 없던 새로운 요소를 추가

 

텍스트 노드 추가

🎯 방법

1. 텍스트 노드와 태그 요소 노드를 만들어서 연결

2. 웹 문서 원하는 위치에 추가

 

태그 요소 노드 만들기

document.createElement(요소명)

 

텍스트 노드 만들기

document.createTextNode(텍스트)

 

태그와 텍스트 노드 연결하기

부모 노드.appendChild(자식 노드)

맨 밑에 텍스트 노드가 추가됨

 

속성값 있는 노드 추가

text를 추가할 때는 <p>만 추가했음

img를 추가할 때는 <img>뿐 아니라 src 속성도 필요함

 

요소 노드 만들기

document.createElement(요소명)

 

속성 노드 만들기

document.createAttribute(속성명)

노드명.value =  속성값

 

속성 노드 연결하기

노드명.setAttributeNode(속성 노드)

 

자식 노드 연결하기

부모 노드.appendChild(자식 노드)

 

 

 

기존 노드 앞에 새 요소 추가하기

insertBefore(새 노드, 기존 노드)

 


 

노드 삭제하기

remove()

요소.remove()

 

title에 h1 태그를 저장하고, 이걸 클릭하면 해당 항목을 삭제하는 코드

const title = document.querySelector("h1");

title.addEventListener("click", () => {
  title.remove();
});

 

removeChild()

부모 요소를 찾고, 그 자식 요소를 삭제

 

부모 노드 찾기

노드.parentNode

 

<body>하위 <h1>태그의 부모를 찾은 결과

자식 노드 삭제

부모 노드.removeChild(자식 노드)

 

const items = document.querySelectorAll("li"); /* 모든 항목 가져오기 */

for (let item of items) {
  item.addEventListener("click", function () {
    this.parentNode.removeChild(this); /* 부모 노드에서 삭제 */
    
    /* 아래 방법으로도 가능 */
    /* this.remove(this); */
  });
}

 

📌 this 주의사항

- function() 내 this는 이벤트가 발생한 노드를 가리킴

- 화살표 함수 내 this는 window객체를 가리킴

 

DOM 구조 활용

  <div id="cart">    
    <h1>장바구니</h1>
    <div id="products">
      <p>
        <span>&cross;</span>
        HTML+CSS+자바스크립트 웹 표준의 정석
      </p>
      <p><span>&cross;</span>리액트 프로그래밍 정석</p>
      <p><span>&cross;</span>타입스크립트 프로그래밍</p>  
    </div>         
  </div>

<p>가 <span> 태그로 x 를 갖고 있음

const buttons = document.querySelectorAll("p > span"); /* 모든 항목 가져오기 */

for (let button of buttons) {
  button.addEventListener("click", function () {
    /* 항목 클릭했을 때 실행할 함수 */
    /* 부모 노드에서 삭제 */
    this.parentNode.remove();
  });
}

1. x를 전부 모은 후, 하나씩 돌아가면서 click 이벤트를 감지한다. 

2. click 발생 시, 부모 요소인 <p>를 얻고, <p>를 삭제함으로써 x표와 문자열을 같이 삭제한다. 

 

'JavaScript' 카테고리의 다른 글

자바스크립트 객체  (0) 2025.03.31
Javascript의 내장 객체  (0) 2025.03.27
이벤트  (0) 2025.03.23
DOM (Document Object Model)  (0) 2025.03.20
함수  (0) 2025.03.18