본문 바로가기
프로그래밍 개발/JS 웹

Javascript DOM - HTMLElement

by Jinseok Kim 2020. 11. 17.
반응형

 

HTMLElement

 

 

getElement* 메소드를 통해서 원하는 객체를 조회했다면 이 객체들을 대상으로 구체적인 작업을 처리해야 한다. 이를 위해서는 획득한 객체가 무엇인지 알아야 한다. 그래야 적절한 메소드나 프로퍼티를 사용할 수 있다.

 

 

 

 

 

 

 

예제1

<ul>
    <li>HTML</li>
    <li>CSS</li>
    <li id="active">JavaScript</li>
</ul>
<script>
    var li = document.getElementById('active');
    console.log(li.constructor.name);
    var lis = document.getElementsByTagName('li');
    console.log(lis.constructor.name);
</script>

 

위의 코드의 결과로 알 수 있는 것은

  • document.getElementById : 리턴 데이터 타입은 HTMLLIELement
  • document.getElementsByTagName : 리턴 데이터 타입은 HTMLCollection

즉 실행결과가 하나인 경우 HTMLLIELement, 복수인 경우 HTMLCollection을 리턴하고 있다. 

 

 

 

 

 

 

 

 

 

예제2

<a id="anchor" href="https://k0502s.tistory.com/">jin seok blog</a>
<ul>
    <li>HTML</li>
    <li>CSS</li>
    <li id="list">JavaScript</li>
</ul>
<input type="button" id="button" value="button" />
<script>
    var target = document.getElementById('list');
    console.log(target.constructor.name);
 
    var target = document.getElementById('anchor');
    console.log(target.constructor.name);
 
    var target = document.getElementById('button');
    console.log(target.constructor.name);
 
</script>

 

위 결과를 통해서 엘리먼트의 종류에 따라서 리턴되는 객체가 조금씩 다르다는 것을 알 수 있다.

 

하지만 모든 엘리먼트들은 HTMLElement상속 받고 있다는 사실을 알아야 한다.

 

  • interface HTMLLIElement : HTMLElement {
  • interface HTMLAnchorElement : HTMLElement {

 

 

 

 

 

 

 

HTMLCollection 예제

<!DOCTYPE html>
<html>
<body>
<ul>
    <li>HTML</li>
    <li>CSS</li>
    <li id="active">JavaScript</li>
</ul>
<script>
console.group('before');
var lis = document.getElementsByTagName('li');
for(var i = 0; i < lis.length; i++){
    console.log(lis[i]);
}
console.groupEnd();
console.group('after');
lis[1].parentNode.removeChild(lis[1]);
for(var i = 0; i < lis.length; i++){
    console.log(lis[i]);
}
console.groupEnd();
</script>
</body>
</html>

 

  • HTMLCollection은 리턴 결과가 복수인 경우에 사용하게 되는 객체다. 유사배열로 배열과 비슷한 사용방법을 가지고 있지만 배열은 아니다. 
  • HTMLCollection의 목록은 실시간으로 변경된다. 그래서 다시 조회할 필요가 없다.
  • 이때 조회 한다는 것은 var lis = document.getElementsByTagName('li'); 에서 lisHTMLCollection객체를 담는다는 것이고, 재조회 한다는 것은 lis[1].parentNode.removeChild(lis[1]); 을 통해서 lis[1]이 삭제되었는데, 이 삭제된 상태를 적용하기 위하여 다시금 var lis = document.getElementsByTagName('li'); 를 사용해서 lisHTMLCollection객체를 담을 필요가 없다는 뜻이다.

 

 

 

 

 

 

 

DOM Tree

 

 

 

 

  • 모든 엘리먼트는 HTMLElement의 자식이다. 따라서 HTMLElement의 프로퍼티를 똑같이 가지고 있다.
  • 동시에 엘리먼트의 성격에 따라서 자신만의 프로퍼티를 가지고 있는데 이것은 엘리먼트의 성격에 따라서 달라진다.
  • HTMLElement는 Element의 자식이고 Element는 Node의 자식이다. Node는 Object의 자식이다. 이러한 관계를 DOM Tree라고 한다.

 

 

 

 

 

반응형

'프로그래밍 개발 > JS 웹' 카테고리의 다른 글

javascript Element 객체 - 식별자 API  (0) 2020.11.19
javascript Element 객체  (0) 2020.11.19
javascript DOM - jQuery  (0) 2020.11.17
javascript DOM - 제어 대상을 찾기  (0) 2020.11.17
javascript BOM  (0) 2020.11.17

댓글