Romantic Developer : )

(Web JavaScript) 웹 자바스크립트 DOM (4) HTML element 본문

Romantic Developer/Web JavaScript

(Web JavaScript) 웹 자바스크립트 DOM (4) HTML element

Romantic_Developer 2018. 8. 2. 17:00

안녕하세요, 영감을 주는 개발자 방민방민입니다.


오늘은 지난 DOM 객체의 엘리먼트 객체를 찾아내는 것에 대하여 조금 더 심화학습해 보고자 합니다.


바로 시작합니다.



1. HTML Element (1)


바로 실습코드를 확인해 보도록 하겠습니다.

<!DOCTYPE>
<html>
	<head>
		
	</head>
	<body>
		<ul>
			<li>HTML</li>
			<li>CSS</li>
			<li id="active">JavaScript</li>
		</ul>
		<script>
			var li = document.getElementById('active');
			console.log(li.constructor.name); // HTMLElement 하나만 리턴
			var lis = document.getElementsByTagName('li');
			console.log(lis.constructor.name); //HTMLCollection 복수 리턴
		</script>
	</body>
</html>

이는 li 변수에 document.getElementById 를 통해서는 단 하나의 엘리먼트만

lis 라는 변수에는 document.getElementsByTagName 를 통해 여러개의 엘리먼트가 리턴되어 저장되는 것을 확인할 수 있습니다. 실행결과는 아래와 같습니다.




2. HTML Element (2)


다음코드입니다.

<html>

<!DOCTYPE>
	<head>
		
	</head>
	<body>
		<a href="htte://aaaa.com" id="anchor">aaaa.com</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>
	</body>
</html>

위의 코드에서 Id list 를 기준으로 엘리먼트를 target 에 담은 상태로 그 constructor 을 출력하면 , HTMLLIELEMENT 를 출력합니다.


반면

anchor 일때는, HTMLAnchorElement를 출력하고 button 일때는 HTMLInputElement 을 출력합니다. 즉 각각의 엘리먼트의 constructor 가 다르다는것을 의미합니다. 


이는 예를들어 위의 a 태그의 경우 링크이기 때문에 herf 라는  속성이 필요한 반면 li 엘리먼트는 herf 속성을 필요로 하지 않습니다. 이와 같이 각각의 엘리먼트들은 그 정의된 객체의 형태가 모드 다르고 이 형태에 따라서  HTML 000 ELEMENT 라고 출력됩니다.


DOM Element 에 대한 표준 정의 객체 유형은 아래의 사이트 링크에서 확인이 가능합니다.


링크


1) HTMLElement

interface HTMLLIElement : HTMLElement {
           attribute DOMString       type;
           attribute long            value;
};

2) HTMLAnchorElement

interface HTMLAnchorElement : HTMLElement {
           attribute DOMString       accessKey;
           attribute DOMString       charset;
           attribute DOMString       coords;
           attribute DOMString       href;
           attribute DOMString       hreflang;
           attribute DOMString       name;
           attribute DOMString       rel;
           attribute DOMString       rev;
           attribute DOMString       shape;
           attribute long            tabIndex;
           attribute DOMString       target;
           attribute DOMString       type;
  void               blur();
  void               focus();
};

두 엘리먼트를 비교해보면 그 구조가 다르지만 AnchorElement 가 일반 Element의 구조를 상속하고 있음을 알 수 있습니다.



3.DOM tree


이처럼 DOM 에서의 객체, 특히 Element 는 부모객체와 자식객체의 상속관계로 이루어져 있습니다.

이를 그림으로 나타내면 아래와 같습니다. (출처 : 생활코딩)


이렇게 DOM 을 이해하는 것에 있어서 위와같은 부모객체 자식객체의 관계를 이해하는 거이 매우 중요합니다.


4.HTML collection


하나의 엘리먼트를 가져오면 HTML element 이지만, 여러개의 엘리먼트를 가져오면, HTML collection(유사배열) 형태로 리턴됩니다. 그리고 유사배열 형태로 저장되는 HTMLCollection 객체의 내용물은 코드에 따라 실시간으로 변경될 수 있습니다.


<!DOCTYPE>
<html>
	<head>
		
	</head>
	<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>

이는 아래의 결과를 출력합니다.

이 내용에 대해서는 자세한 설명보다는 HTML collection 이라는 엘리먼트의 집합 객체 내부에 속해있는 많은 엘리먼스가 코드에 따라 실시간으로 변경될 수 있다는 것만 일단 이해하면 될 것 같습니다.



자, 오늘은 여기까지 자바스크립트에서 HTML Element 과 HTMLCollection 에 대하여 알아보았습니다.


지김까지 영감을 주는 개발자 방민방민이었습니다!