본문 바로가기
Study/JavaScript

DOM 노드와 주요 프로퍼티

by 나아가는 2023. 8. 30.
반응형

DOM 노드 클래스

 

DOM 노드는 종류에 따라 각각 다른 프로퍼티를 지원한다.

계층 구조 최상위에는 EventTarget 이 있다.

 

속성과 프로퍼티

속성

  • HTML 에서 쓰인다.
  • HTML 에서 태그는 여러개의 속성을 가질 수 있다.

프로퍼티 

  • DOM 객체 안에서 쓰인다.
  • 브라우저는 HTML을 파싱해서 DOM 객체를 만든다.
  • HTML 표준 속성을 인식하고 이를 DOM 프로퍼티로 만든다.
  • 표준이 아닌 속성은 메서드를 이용해 접근이 가능하다.
  • 표준이 아닌 속성에는 사용자가 지정한 속성이 있다.
<!-- 이름(name) 정보를 보여주는 div라고 표시 -->
<div show-info="name"></div>
<!-- 나이(age) 정보를 보여주는 div라고 표시 -->
<div show-info="age"></div>

<script>
  // 표시한 요소를 찾고, 그 자리에 원하는 정보를 보여주는 코드
  let user = {
    name: "Pete",
    age: 25
  };

  for(let div of document.querySelectorAll('[show-info]')) {
    // 원하는 정보를 필드 값에 입력해 줌
    let field = div.getAttribute('show-info');
    div.innerHTML = user[field]; // Pete가 'name'에, 25가 'age'에 삽입됨
  }
</script>

 

  프로퍼티 속성
타입 모든 타입 가능, 각 표준 프로퍼티의 타입은 명세서에 설명되어 있음 문자열
이름 대·소문자 구분 대·소문자 구분하지 않음

속성과 함께 쓰이는 메서드:

  • elem.hasAttribute(name) – 속성 존재 여부 확인
  • elem.getAttribute(name) – 속성값을 가져옴
  • elem.setAttribute(name, value) – 속성값을 변경함
  • elem.removeAttribute(name) – 속성값을 지움
  • elem.attributes – 속성의 컬렉션을 반환함

주요 노드 프로퍼티

innerHTML

  • 요소 안의 HTML을 문자열 형태로 받아오고, 수정할 수 있다.
  • 페이지를 수정할 때 유용하게 사용하는 방법 중 하나이다.
  • 요소 노드에만 사용할 수 있다.
<body>
  <p>p 태그</p>
  <div>div 태그</div>

  <script>
    alert( document.body.innerHTML ); // 내용 읽기
    document.body.innerHTML = '새로운 BODY!'; // 교체
  </script>

</body>

nodeValue / data

  • 요소 노드를 제외한 텍스트 같은 다른 타입의 노드에서 노드의 내용을 변경할 때 사용할 수 있다.
<body>
  안녕하세요.
  <!-- 주석 -->
  <script>
    let text = document.body.firstChild;
    alert(text.data); // 안녕하세요.

    let comment = text.nextSibling;
    alert(comment.data); // 주석
  </script>
</body>

textContent

  • HTML에서 모든 태그를 제외한 텍스트만 추출 할 수 있다.
  • 값을 할당할 때는 태그를 포함한 특수문자를 문자열로 처리하기 때문에 쓰기용으로 유용하게 사용할 수 있다.
<div id="elem1"></div>
<div id="elem2"></div>

<script>
  let name = prompt("이름을 알려주세요.", "<b>이보라</b>");

  elem1.innerHTML = name; // 이보라
  elem2.textContent = name; //"<b>이보라</b>"
</script>
  • innerHTML과 textContent 를 비교해보면 첫번째 div 에는 입력한 태그가 태그로 해석되어 굵은 글씨로 출력되고,
  • 두번째 div 에는 이름이 택스트 형태로 저장되어 태그가 그대로 출력된다.
  • 사용자의 입력값을 받아서 처리할 때, 예상치 못한 HTML이 입력되는 것을 막기 위해서 textContent를 사용할 수 있다.

hidden

  • 속성을 보여줄지 말지 지정할 수 있다.
  • true 일 때, style="display:none" 와 동일한 기능을 한다.
<div id="elem">깜빡이는 요소</div>

<script>
  setInterval(() => elem.hidden = !elem.hidden, 1000);
</script>

 

예제) li 노드 안에 있는 텍스트 출력하기

<!DOCTYPE HTML>
<html>
<body>

  <ul>
    <li>육상 동물
      <ul>
        <li>포유류
          <ul>
            <li>소</li>
            <li>당나귀</li>
            <li>개</li>
            <li>호랑이</li>
          </ul>
        </li>
        <li>비 포유류
          <ul>
            <li>뱀</li>
            <li>새</li>
            <li>도마뱀</li>
          </ul>
        </li>
      </ul>
    </li>
    <li>수생 동물
      <ul>
        <li>담수 동물
          <ul>
            <li>붕어</li>
            <li>메기</li>
          </ul>
        </li>
        <li>해양 동물
          <ul>
            <li>해마</li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>

  <script>
    for (let li of document.querySelectorAll('li')) {
	  let title = li.firstChild.data;
   }
  </script>

</body>
</html>
반응형

'Study > JavaScript' 카테고리의 다른 글

JavaScript 미니 프로젝트 Todo List  (0) 2023.09.12
JavaScript 미니 프로젝트 _ 숫자 맞추기 게임  (1) 2023.09.11
문서 객체 모델 DOM  (0) 2023.08.29
자바 스크립트 기본  (0) 2023.08.28