πŸ“Web Developing/JavaScript 기초

DOM μš”μ†Œμ— μ ‘κ·Όν•˜κ³  속성 κ°€μ Έμ˜€κΈ°

Hush 2022. 6. 23. 18:10

DOM에 μ ‘κ·Όν•˜κΈ°

CSSμ—μ„œλŠ” class, id, νƒœκ·Έ λ“±μ˜ μŠ€νƒ€μΌμ„ 각각 κ΅¬λ³„ν•΄μ„œ μ •μ˜ν•΄μ•Ό ν•œλ‹€.

μ΄λ•Œ class, id, νƒœκ·Έ 등을 μ„ νƒμž(selector)라고 ν•œλ‹€.

이 μ„ νƒμžλ₯Ό μ‚¬μš©ν•΄μ„œ DOM에 μ ‘κ·Όν•˜λŠ” 방법을 μ•Œμ•„λ³΄μž.

 

id μ„ νƒμžλ‘œ μ ‘κ·Όν•˜λŠ” getElementByld() λ©”μ„œλ“œ

HTML νƒœκ·Έμ˜ id 속성은 HTML μš”μ†Œκ°€ λ¬Έμ„œ μ•ˆμ—μ„œ μ€‘λ³΅λ˜μ§€ μ•Šλ„λ‘ μ‚¬μš©ν•˜λŠ” CSS μ„ νƒμžμ΄λ‹€.

λ‹€μŒκ³Ό 같이 getElementById() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜λ©΄ νŠΉμ •ν•œ idκ°€ ν¬ν•¨λœ DOM μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆλ‹€.

μš”μ†Œλͺ….getElementById("idλͺ…")

예λ₯Ό λ“€μ–΄ id값이 heading인 μš”μ†Œμ— μ ‘κ·Όν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•œλ‹€.

document.getElementById("heading")

 

classκ°’μœΌλ‘œ μ ‘κ·Όν•˜λŠ” getElementsByClassName() λ©”μ„œλ“œ

getElementsByClassName() λ©”μ„œλ“œλŠ” μ§€μ •ν•œ class μ„ νƒμž 이름이 λ“€μ–΄ μžˆλŠ” DOM μš”μ†Œμ— μ ‘κ·Όν•œλ‹€.

μš”μ†Œλͺ….getElementsByClassName("classλͺ…")

class μ„ νƒμžλŠ” μ›Ή λ¬Έμ„œ μ•ˆμ˜ μ—¬λŸ¬ μš”μ†Œμ—μ„œ μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ getElementsByClassName() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λ°˜ν™˜ν•˜λŠ” μš”μ†Œκ°€ 2개 이상일 수 μžˆλ‹€.

κ·Έλž˜μ„œ 이 λ©”μ„œλ“œ μ΄λ¦„μ—λŠ” λ°˜ν™˜ μš”μ†Œκ°€ μ—¬λŸ¬ κ°œλΌλŠ” λœ»μ—μ„œ Element에 sλ₯Ό 뢙인 것이닀.

예λ₯Ό λ“€μ–΄ μ›Ή λ¬Έμ„œμ—μ„œ class="bright" 속성이 μžˆλŠ” μš”μ†Œλ₯Ό λͺ¨λ‘ 찾으렀면 λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•œλ‹€.

document.getElementsByClassName("bright")

이 κ²°κ³Ό 클래슀 이름이 같은 DOM μš”μ†Œλ“€μ΄ HTMLCollection 객체둜 μ €μž₯λœλ‹€.

HTMLCollection κ°μ²΄λŠ” λ°°μ—΄κ³Ό λΉ„μŠ·ν•˜κ³  λ°°μ—΄μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ 배열은 μ•„λ‹ˆλ‹€.

 

νƒœκ·Έ μ΄λ¦„μœΌλ‘œ μ ‘κ·Όν•˜λŠ” getElementsByTagName() λ©”μ„œλ“œ

classλ‚˜ idλ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ€ DOM μš”μ†Œμ— μ ‘κ·Όν•˜λ €λ©΄ νƒœκ·Έλ₯Ό μ΄μš©ν•œλ‹€.

getElementsByTagName() λ©”μ„œλ‹€λŠ” λ‹€μŒκ³Ό 같이 μ§€μ •ν•œ νƒœκ·Έλͺ…을 μ‚¬μš©ν•œ DOM μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆλ‹€.

μš”μ†Œλͺ….getElementsByTagName("νƒœκ·Έλͺ…")

μ›Ή λ¬Έμ„œ μ•ˆμ—μ„œ 같은 νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λŠ” μš”μ†Œκ°€ 2개 이상일 수 μžˆμœΌλ―€λ‘œ getElementsByTagName() λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” 값도 HTMLCollection ν˜•νƒœλ‘œ μ €μž₯λœλ‹€.

예λ₯Ό λ“€μ–΄ μ›Ή λ¬Έμ„œμ—μ„œ <p> νƒœκ·Έλ₯Ό μ‚¬μš©ν•œ λͺ¨λ“  μš”μ†Œμ— μ ‘κ·Όν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•œλ‹€.

document.getElementsByTagName("p")

 

λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ μ ‘κ·Όν•˜λŠ” querySelector(), querySelectorAll() λ©”μ„œλ“œ

μ•žμ—μ„œ μ‚΄νŽ΄λ³Έ getElementById(), getElementsByClassName(), getElementsByTagName() λ©”μ„œλ“œμ˜ λ°˜ν™˜κ°’μ€ HTMLCollection 객체이닀.

μ—¬κΈ°μ—λŠ” HTMLμš”μ†Œ('p' λ‚˜ 'a' 같은 ν˜•νƒœ)만 μ €μž₯λœλ‹€.

DOM 트리의 ν…μŠ€νŠΈ, 속성 λ…Έλ“œκΉŒμ§€ 자유둭게 μ œμ–΄ν•˜λ €λ©΄ querySelector(), querySelectorAll() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

id μ„ νƒμžμ²˜λŸΌ λ°˜ν™˜κ°’μ΄ ν•˜λ‚˜λΌλ©΄ querySelector() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ³ , class μ„ νƒμžλ‚˜ νƒœκ·Έ 이름을 μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ 값이 ν•œκΊΌλ²ˆμ— λ°˜ν™˜λ  κ²½μš°μ—λŠ” querySelectorAll() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

λ…Έλ“œ.querySelector(μ„ νƒμž)
λ…Έλ“œ.querySelectorAll(μ„ νƒμž λ˜λŠ” νƒœκ·Έ)

querySelector(), querySelectorAll() λ©”μ„œλ“œμ—μ„œ μ„ νƒμžλ₯Ό ν‘œμ‹œν•  λ•Œ id 이름 μ•žμ—λŠ” ν•΄μ‹œκΈ°ν˜Έ(#)λ₯Ό 뢙이고, class 이름 μ•žμ—λŠ” λ§ˆμΉ¨ν‘œ(.)λ₯Ό 뢙인닀. νƒœκ·ΈλŠ” 기호 없이 νƒœκ·Έλͺ…λ§Œ μ“°λ©΄ λœλ‹€.

querySelector() λ©”μ„œλ“œμ—μ„œ class μ΄λ¦„μœΌλ‘œ μ ‘κ·Όν•  λ•ŒλŠ” class 이름을 μ‚¬μš©ν•œ μ—¬λŸ¬ μš”μ†Œ μ€‘μ—μ„œ 첫 번째 μš”μ†Œλ§Œ λ°˜ν™˜ν•œλ‹€.

querySelector("#heading") // id="heading" 인 μš”μ†Œ
querySelectorAll(".bright") // class="bright"인 μš”μ†Œ

querySelector(), querySelectorAll() λ©”μ„œλ“œμ˜ λ°˜ν™˜κ°’μ€ λ…Έλ“œμ΄κ±°λ‚˜ λ…Έλ“œ λ¦¬μŠ€νŠΈμ΄λ‹€.

λ…Έλ“œ λ¦¬μŠ€νŠΈλŠ” λ…Έλ“œλ₯Ό ν•œκΊΌλ²ˆμ— μ—¬λŸ¬ 개 μ €μž₯ν•œ κ²ƒμœΌλ‘œ λ°°μ—΄κ³Ό λΉ„μŠ·ν•˜λ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€.

 

μ›Ή μš”μ†Œμ˜ λ‚΄μš©μ„ μˆ˜μ •ν•˜λŠ” innerText, innerHTML ν”„λ‘œνΌν‹°

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” μ›Ή μš”μ†Œμ˜ λ‚΄μš©λ„ μˆ˜μ •ν•  수 μžˆλ‹€.

κ°€μž₯ μ‰¬μš΄ 방법은 innerTextν”„λ‘œνΌν‹°λ‚˜ innerHTML ν”„λ‘œνΌν‹°λ₯Ό μ΄μš”ν•˜λŠ” 것이닀.

μ΄λ¦„λ§Œ 봐도 μ•Œ 수 μžˆλ“―μ΄, innerText ν”„λ‘œνΌν‹°λŠ” ν…μŠ€νŠΈ λ‚΄μš©μ„ ν‘œμ‹œν•˜κ³  innerHTML ν”„λ‘œνΌν‹°λŠ” HTML νƒœκ·ΈκΉŒμ§€ λ°˜μ˜ν•˜μ—¬ ν‘œμ‹œν•œλ‹€.

μš”μ†Œλͺ….innerText = λ‚΄μš©
μš”μ†Œλͺ….innerHTML = λ‚΄μš©

λ‹€μŒμ€ Date 객체λ₯Ό μ‚¬μš©ν•΄μ„œ ν˜„μž¬ λ‚ μ§œμ™€ μ‹œκ°„μ„ λ‚˜νƒ€λ‚΄λŠ” μ˜ˆμ œμ΄λ‹€.

λ‚ μ§œμ™€ μ‹œκ°„μ„ κ·ΈλŒ€λ‘œ innerText ν”„λ‘œνΌν‹°λ‘œ ν‘œμ‹œν•  λ•Œμ™€ innerHTML ν”„λ‘œνΌν‹°λ‘œ <em> νƒœκ·Έμ™€ 같이 ν‘œμ‹œν•  λ•Œ μ–΄λ–€ 차이가 μžˆλŠ”μ§€ μ‚΄νŽ΄λ³΄μž.

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>innerText, innerHTML ν”„λ‘œνΌν‹°</title>
</head>
<body>
	<button onclick="inntext()">innerText둜 ν‘œμ‹œν•˜κΈ°</button>
	<button onclick="innhtml()">innerHTML둜 ν‘œμ‹œν•˜κΈ°</button>
	<h1>ν˜„μž¬ μ‹œκ°: </h1>
	<div id="current"></div>
	
	<script>
		var now = new Date();

		function inntext(){
			document.getElementById("current").innerText = now;
		}
		function innhtml() {
			document.getElementById("current").innerHTML = "<em>" + now + "</em>";
		}
	</script>
</body>
</html>

 

속성을 κ°€μ Έμ˜€κ±°λ‚˜ μˆ˜μ •ν•˜λŠ” getAttribute(), setAttribute() λ©”μ„œλ“œ

μ›Ή μš”μ†Œλ₯Ό λ¬Έμ„œμ— μ‚½μž…ν•  λ–„ νƒœκ·Έ 속성을 ν•¨κ»˜ μ‚¬μš©ν•˜λ©΄ DOM νŠΈλ¦¬μ— 속성 λ…Έλ“œκ°€ μΆ”κ°€λ˜λ©΄μ„œ 속성값이 μ €μž₯λœλ‹€.

μ΄λ•Œ 속성에 μ ‘κ·Όν•˜λ €λ©΄ getAttribute() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ³ , μ ‘κ·Όν•œ μ†μ„±μ˜ 값을 λ°”κΎΈλ €λ©΄ setAttribute() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

 

속성을 κ°€μ Έμ˜€λ €λ©΄ λ‹€μŒκ³Ό 같이 getAttrubyte() λ©”μ„œλ“œμ—μ„œ 속성λͺ…을 μ§€μ •ν•œλ‹€.

getAttribute("속성λͺ…")

setAttribute() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μ›ν•˜λŠ” μ†μ„±κ°’μœΌλ‘œ μ§€μ •ν•  수 μžˆλ‹€.

속성값이 이미 μžˆλ‹€λ©΄ μƒˆλ‘œμš΄ μ†μ„±κ°’μœΌλ‘œ μˆ˜μ •ν•˜κ³ , 아직 ν•΄λ‹Ή 속성이 μ—†λ‹€λ©΄ 속성과 속성값을 μƒˆλ‘œ μΆ”κ°€ν•œλ‹€.

setAttribute("속성λͺ…", "κ°’")

λ‹€μŒμ€ id="cup"인 μ΄λ―Έμ§€μ˜ src 속성값을 κ°€μ Έμ˜€λŠ” μ˜ˆμ œμ΄λ‹€.

큰 이미지λ₯Ό ν΄λ¦­ν•˜λ©΄ κ·Έ μ΄λ―Έμ§€μ˜ 경둜 속성을 가져와 μ•Œλ¦Ό 창에 ν‘œμ‹œν•œλ‹€.

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>innerText, innerHTML ν”„λ‘œνΌν‹°</title>
</head>
<body>
	<img src="images/EiffleTower.jpg" alt="ET" onclick="DisplaySrc()" id="et">
	<script>
		function DisplaySrc(){
			var et=document.querySelector("#et");
			alert("이미지 μ†ŒμŠ€: "+ et.getAttribute("src"));
		}
	</script>
</body>
</html>