본문 바로가기

TIL✨

DOM_TIL(23)

오늘 튜터님께서 추천해준 모던자바스크립트부분중에서 항상 궁금했던 DOM에 대해서 정리를 하려고 한다.

사실 오늘 처음 제대로 공부하는거라 분명 내가 이해 한것 중 틀린 부분이 있겠지만 점차 내가 해보고 틀린 것들을 수정해보려고한다.


<DOM 기본>

: DOM이란 html구조를 트리형식으로 만들어 놓은 것이다.

  그래서 이 구조들을 통해서 원하는 특정 요소를 불러다가 script에서 사용할 수 있다.

 

   일단 <html>  //   <head>,<body>등과 같은 태그들은 요소노드라고 하며, 트리 구조를 구성한다.

            ㄴ루트노드       ㄴ루트노드의 자식

  텍스트노드와, 공백만 있는 텍스트 노드는 개발자 도구에선 보이지 않는다.

 

*여기서 노드란? 확실하지 않지만 내가 이해하기론 하나의 내용을 가진 코드 줄을 노드라고 하는 것 같다.

 ( 나중에 잘못 이해한거라면 고치러 온다)

 

<html> = document.documentElement  : dom 트리 꼭대기에 있는 <html>태그에 해당한다.

<body> = document.body : <body>에 해당하는 노드이다.

<head> = document.head : <head>에 접근할 수 있다.

 

 

<자식노드 탐색하기>

 

1. child node = 부모노드 바로 아래위치한 태그들   >>>> <head> 와 <body>는 <html>요소의 자식 노드이다,

   descendants = 후손노드 , 자식노드의 모든 자식노드 등이 후손 노드가 된다.

 

==코드예시==

<html>
<body>
  <div>시작</div>
  <ul>
    <li>항목</li>
  </ul>
  <div>끝</div>
  <script>
    for (let i = 0; i < document.body.childNodes.length; i++) {
    alert( document.body.childNodes[i] );    // Text, DIV, Text, UL, ... , SCRIP
    }
  </script>

  ...추가 내용...

</body>
</html>

 

 

 

<DOM컬렉션>

1. childNodes

 :  childNodes는 배열 같아 보이는데, 배열이 아닌 유사 배열 객체인 컬렉션이다.

 

    ⓐ  for..of 를 사용할 수 있습니다.

   ===

for (let node of document.body.childNodes) {
  alert(node); // 컬렉션 내의 모든 노드를 보여줍니다.
}

  ===

 

 ** 그러나 컬렉션에  for in  반복문은 사용하지 말 것

     for..in 반복문은 객체의 모든 열거 가능한 프로퍼티를 순회합니다. 

 

 ⓑ filter와 같은 배열 메서드를 사용할 수 없다 ( 배열이 아니기 때문에)

 

2. 형제(sibling) 노드

대표적인 예로는 <html>,<body> 있다.

위쪽에서부터 아래쪽으로 다음 또는 우측 순서라고 생각하면 된다.

다음 형제 노드에 대한 정보는 nextSibling, 이전 형제 노드에 대한 정보는 previousSibling 프로퍼티

 

3.부모

부모 노드에 대한 정보는 parentNode 프로퍼티

=====

// <body>의 부모 노드는 <html>입니다
alert( document.body.parentNode === document.documentElement ); // true

// <head>의 다음 형제 노드는 <body>입니다.
alert( document.head.nextSibling ); // HTMLBodyElement


// <body>의 이전 형제 노드는 <head>입니다.
alert( document.body.previousSibling ); // HTMLHeadElement


***  document를 적고 기준이 되는 태그를 적어주어야한다.

=====


<DOM탐색하기>

이 두 이미지의 차이점?

위의 두 이미지는 유사해보이지만 element라는 단어가 추가되어 있다(왼쪽에)

=> 이 왼쪽 이미지는 기존의 봤던 오른쪽 구조와 똑같지만 요소 노드만을 가르킨다.

쉽게 말해서 element 붙어있다면 요소노드를 반환하고 node 붙어있다면 종류에 상관없이 모든 노드들을 반환한다.

 

<html>
<body>
  <div>시작</div>
  <ul>
    <li>항목</li>
  </ul>
  <div>끝</div>
  <script>
    for (let elem of document.body.children) {
      alert(elem); // DIV, UL, DIV, SCRIPT
    }
  </script>
  ...
</body>
</html>

=> childrenNode children으로 바꾸면 요소노드들만 출력되는것을 있다.

 

<table>

이 부분은 내가 이해하기 편하게

     
    🚩
     

------> 행은 row    즉, row[1]: 2번째 줄

              cells    그 행 안에서의 칸 위치   즉, cells[2]: 3번째 칸

▷ table.row[1].cells[3] 은 깃발 있는 곳이 된다.

'TIL✨' 카테고리의 다른 글

class TIL(25)  (1) 2022.12.02
함수 TIL(24)  (0) 2022.12.01
심화 자바스크립트TIL(22)  (0) 2022.11.29
댓글 수정 기능 만들기 TIL(20)  (1) 2022.11.25
비밀번호 변경 , 내가 쓴 글 목록 불러오기 TIL(19)  (0) 2022.11.24