๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/Javascript

(53) [JavaScript] 9์ผ JavaScript DOM

by ๋”ฐ๊ถˆ 2024. 5. 2.

 

 

DOM์ด๋ž€?
์›น ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ ๋ฅผ ์กฐ์ž‘ํ•œ๋А ๋ฉ”์†Œ๋“œ์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
XML์„ HTML์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•์žฅ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค.

 

 

 

DOM์˜ ๊ณ„์ธต๊ตฌ์กฐ

 

 

 

Node 

 

 

 

ELement

์ฃผ์š” ์†์„ฑ ์„ค๋ช…
closest(selector) ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์กฐ์ƒ์„ ์ฐพ๋Š”๋‹ค.
children ๋ชจ๋“  ์ž์‹ ์š”์†Œ๋ฅผ ์ฐพ๋Š”๋‹ค. ํƒœ๊ทธ๋งŒ ๊ฒ€์ƒ‰.
์š”์†Œ์— ์š”์†Œ ์ž์‹์ด ์—†์œผ๋ฉด children์˜ length๋Š” 0
fitstElementChild ์š”์†Œ์˜ ์ฒซ๋ฒˆ์งธ ์ž์‹์„ ๋ฐ˜ํ™˜. ํƒœ๊ทธ๋งŒ ๊ฒ€์ƒ‰, ์ž์‹ ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ  null๋ฐ˜ํ™˜
innerHTML ์š”์†Œ์˜ HTML ์ปจํ…์ธ ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜
getAttribute ์š”์†Œ์˜ ์ง€์ •๋œ ์†์„ฑ๊ฐ’์„ ๋ฐ˜ํ™˜
setAttribute ์ง€์ •๋œ ์†์„ฑ์„ ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ฉฐ, ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์†์„ฑ์ด๋ฉด ๊ฐ’์„ ๋ณ€๊ฒฝ 

 

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
</head>
<body>

	<h3>๋…ธ๋“œ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ</h3>

	<div id="subjectLayout"
		style="width: 300px; min-height: 300px; border: 1px solid tomato;">
		<p>์ž๋ฐ”</p>
		<p>์•ˆ๋“œ๋กœ์ด๋“œ</p>
		<p>ํ”„๋ ˆ์ž„์›Œํฌ</p>
	</div>

	<hr>

	<div>
		<p>
			<button type="button" onclick="fun1();">๋…ธ๋“œ์ •๋ณด</button>
			<button type="button" onclick="fun2();">๋…ธ๋“œ์ถ”๊ฐ€</button>
			<button type="button" onclick="fun3();">ํŠน์ •๋…ธ๋“œ์•ž์—์ถ”๊ฐ€</button>
			<button type="button" onclick="fun4();">๋…ธ๋“œ์‚ญ์ œ</button>
			<button type="button" onclick="fun5();">์Šคํƒ€์ผ์—†์• ๊ธฐ</button>
		</p>
	</div>

	<script type="text/javascript">
	window.addEventListener('load',function(){
		//children : ํƒœ๊ทธ๋งŒ ๊ฒ€์ƒ‰
		const ps = document.querySelector('#subjectLayout').children;
		//const ps = document.querySelectorAll('#subjectLayout > p');
		for(let el of ps){
			el.addEventListener('click',function(e){
				alert(this.firstChild.nodeValue); // this > ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๊ฐ์ฒด 
				// firstChild : ๋ชจ๋‘ ๊ฐ€์ ธ์˜ด
	});
		}
	});
	
		function fun1() {
			const divEL = document.querySelector('#subjectLayout');
			let s;
			
			// ์†์„ฑ ์ถ”๊ฐ€	
			divEL.setAttribute('title','๊ณผ๋ชฉ'); 
			
			// ์†์„ฑ ํ™•์ธ
			s = divEL.getAttribute('style');
			alert(s);
			
			// ์ž์‹ ์ •๋ณด
			// childNodes : ์ž์‹ ์ •๋ณด(๋ฌธ์ž์—ด, ๊ณต๋ฐฑ, ์—”ํ„ฐ, ํƒœ๊ทธ๋“ฑ)
			// s+= '๋…ธ๋“œ์ˆ˜ :' + divEL.childNodes.length; //7  
			s += '๋…ธ๋“œ์ˆ˜ :' + divEL.childNodes.length;
			alert(s);
			
			//children : ์ž์‹์ฃผ์šฐ ใ…๊ทธ๋งŒ
			s+= '๋…ธ๋“œ์ˆ˜ :' + divEL.children.length; //3
			console.log(divEL.children); 
			alert(s);
			
			
		}
		function fun2() {
			const divEL = document.querySelector('#subjectLayout');
						
			//๋…ธ๋“œ ์ถ”๊ฐ€
			let node = document.createElement('p'); // ํƒœ๊ทธ 
			node.setAttribute('title','์„œ๋ธ”๋ฆฟ...'); // ์†์„ฑ ์ถ”๊ฐ€ 
			node.onclick= function(e){alert(this.firstChild.nodeValue)};
			
			let textNode = document.createTextNode('์„œ๋ธ”๋ฆฟ'); // ํ…์ŠคํŠธ ๋…ธ๋“œ 
			node.appendChild(textNode);
			
			divEL.appendChild(node); 
		}
		
		function fun3() {
			const divEL = document.querySelector('#subjectLayout');
			
			//๋…ธ๋“œ ์ถ”๊ฐ€ ์•ž 
			let node = document.createElement('p'); // ํƒœ๊ทธ 
			node.setAttribute('title','์•ž์—...'); // ์†์„ฑ ์ถ”๊ฐ€ 
			node.onclick= function(e){alert(this.firstChild.nodeValue)};
			
			let textNode = document.createTextNode('์•ž'); // ํ…์ŠคํŠธ ๋…ธ๋“œ 
			node.appendChild(textNode);
			
			// insertBefor -> ๋ฌด์—‡์„? ์–ด๋””์—? ์ถ”๊ฐ€ํ• ์ง€ใ…ฃ
			divEL.insertBefore(node,divEL.children[0]); // ๊ฐ€์žฅ ์•ž์— 
		}
		
		function fun4() {
			
			const divEL=document.querySelector('#subjectLayout');
			//๊ฐ€์žฅ ์•ž ๋…ธ๋“œ ์‚ญ์ œ 
			if(divEL.children.length){
				divEL.removeChild(divEL.children[0]);
			}

		}
		
		function fun5() {
			const divEL = document.querySelector('#subjectLayout');
			// ์Šคํƒ€์ผ ๋ณ€๊ฒฝ 
			divEL.style.border='none';
		}
	</script>

</body>
</html>