15-3. JS DOM์—์„œ ๋…ธ๋“œ ์ถ”๊ฐ€, ์‚ญ์ œ ํ•˜๋Š” ๋ฐฉ๋ฒ•

2021. 10. 22. 22:59ใ†HTML + CSS + JS

728x90

 

1. ๋…ธ๋“œ ๋ฆฌ์ŠคํŠธ node list 

DOM ์—์„œ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋…ธ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. 

DOM์—์„œ ์ ‘๊ทผํ•  ๋•Œ querySelectorAll() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋…ธ๋“œ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. 

์ด๋•Œ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ €์žฅํ•œ ๊ฒƒ์ด ๋…ธ๋“œ๋ฆฌ์ŠคํŠธ์ด๋‹ค. 

 

์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ์—๋Š” 

1๏ธโƒฃ ๋ชจ๋‘” HTML ํƒœ๊ทธ๋Š” ์š”์†Œ(element) ๋…ธ๋“œ์ด๋‹ค. 

2๏ธโƒฃ HTML ํƒœ๊ทธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ…์ŠคํŠธ ๋‚ด์šฉ์€ ๋‚˜์‹ ๋…ธ๋“œ์ธ ํ…์ŠคํŠธ(text) ๋…ธ๋“œ์ด๋‹ค. 

3๏ธโƒฃ HTML ํƒœ๊ทธ์— ์žˆ๋Š” ์†์„ฑ์€ ์ž์‹ ๋…ธ๋“œ์ธ ์†์„ฑ(attribute) ๋…ธ๋“œ์ด๋‹ค. 

4๏ธโƒฃ ์ฃผ์„์€ ์ฃผ์„(comment) ๋…ธ๋“œ์ด๋‹ค. 

์ด ๋„ค๊ฐ€์ง€ ์›์น™์„ ๊ธฐ์–ตํ•ด์•ผํ•œ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด img ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๊ทธ ๋…ธ๋“œ์˜ ์†์„ฑ์— ํ•ด๋‹นํ•˜๋Š” src์™€ alt๋…ธ๋“œ๋„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

 

2. ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ ์ถ”๊ฐ€

 

1๏ธโƒฃ ์š”์†Œ ๋…ธ๋“œ ๋งŒ๋“ค๊ธฐ - createElement() ๋ฉ”์„œ๋“œ 

document.createElement(๋…ธ๋“œ๋ช…)

2๏ธโƒฃ ํ…์ŠคํŠธ ๋…ธ๋“œ ๋งŒ๋“ค๊ธฐ - createTextNode() ๋ฉ”์„œ๋“œ 

document.createTextNode(ํ…์ŠคํŠธ);

3๏ธโƒฃ ์ž์‹ ๋…ธ๋“œ ์—ฐ๊ฒฐํ•˜๊ธฐ - appendChild() ๋ฉ”์„œ๋“œ 

๋…ธ๋“œ๋“ค์„ ์ง€๊ธˆ๊นŒ์ง€ ๋งŒ๋“ค๊ธฐ๋งŒ ํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ด์ค˜์•ผํ•œ๋‹ค. 

4๏ธโƒฃ ์ „์ฒด ์ฝ”๋“œ 

์ด๋•Œ onclick = "addP(); this.onclick = ' ' ; " ๋กœ  ์„ค์ •ํ•œ ์ด์œ ๋Š” addP() ํ•จ์ˆ˜๋ฅผ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

์ด ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉด ๋งํฌ๋ฅผ ํด๋ฆญํ•  ๋•Œ ๋งˆ๋‹ค p ์š”์†Œ๊ฐ€ ๊ณ„์† ์ถ”๊ฐ€๋œ๋‹ค. 

 

 

3. ์†์„ฑ์ด ์žˆ๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ ์ถ”๊ฐ€ 

html ํƒœ๊ทธ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ์›น ์š”์†Œ๋ฅผ ์ œ์–ดํ•œ๋‹ค. 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋งŒ๋“ค๋ฉด ๊ทธ์™€ ๊ด€๋ จ๋œ ์†์„ฑ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค์–ด์„œ ์ž์‹ ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐํ•ด์•ผํ•œ๋‹ค. 

 

1๏ธโƒฃ ์š”์†Œ ๋…ธ๋“œ ๋งŒ๋“ค๊ธฐ - createElement() ๋ฉ”์„œ๋“œ 

2๏ธโƒฃ ์†์„ฑ ๋…ธ๋“œ ๋งŒ๋“ค๊ธฐ - createAttribute() ๋ฉ”์„œ๋“œ 

document.createAttribute(์†์„ฑ๋ช…) 

3๏ธโƒฃ ์†์„ฑ ๋…ธ๋“œ ์—ฐ๊ฒฐํ•˜๊ธฐ - setAttributeNode() ๋ฉ”์„œ๋“œ 

์š”์†Œ๋ช….setAttributeNode(์†์„ฑ๋…ธ๋“œ) 

์ด๋•Œ value ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•ด ์†์„ฑ๊ฐ’์„ ์ง€์ •ํ•ด์ค€๋‹ค. 

 

4๏ธโƒฃ ์ž์‹ ๋…ธ๋“œ ์—ฐ๊ฒฐํ•˜๊ธฐ - appendChild() ๋ฉ”์„œ๋“œ 

 

5๏ธโƒฃ ์ „์ฒด ์ฝ”๋“œ ์™„์„ฑ 

 

* ์—ฐ์Šต๋ฌธ์ œ 

ํ…์ŠคํŠธ ํ•„๋“œ์— ์ž…๋ ฅํ•œ ๊ฐ’์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ 

 

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Web Programming</title>
	<link rel="stylesheet" href="css/nodelist.css">
</head>
<body>
  <div id="container">
    <h1>Web Programming</h1>
    <p>๊ณต๋ถ€ํ•  ์ฃผ์ œ๋ฅผ ๊ธฐ๋กํ•ด ๋ณด์„ธ์š”</p>
    <form action="">
      <input type="text" id="subject" autofocus>
      <button onclick="newRegister(); return false;">์ถ”๊ฐ€</button>
      
    </form>
    <hr>  
    <ul id="itemList"></ul>  
  </div>

  <script>

    function newRegister() {
    var newItem = document.createElement("li");
    var subject = document.querySelector("#subject");
    var nextText = document.createTextNode(subject.value);

    newItem.appendChild(nextText);

    var itemList = document.querySelector("#itemList");
    itemList.appendChild(newItem);

    subject.value="";
    }
  </script>
</body>
</html>

์ด๋•Œ return false() ํ•˜๋Š” ์ด์œ ๋Š” ๋ฒ„ํŠผ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ธ submit ์—ญํ• ์„ ์ทจ์†Œํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

์ด ๊ธฐ๋Šฅ์„ ์ทจ์†Œํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ๋จผ์ € ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ๋„๊ณ  ํ•จ์ˆ˜๋งŒ ์‹คํ–‰ํ•˜๋ผ๊ณ  ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ๋‹ค!

 

 

4. ๋…ธ๋“œ ์‚ญ์ œํ•˜๊ธฐ 

๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ๊ธฐ์–ตํ•ด์•ผํ•  ๊ฒƒ์€ ๋ถ€๋ชจ ๋…ธ๋“œ์—์„œ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

์‚ญ์ œํ•ด์•ผํ•  ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ผญ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ์ฐพ์•„์•ผํ•œ๋‹ค!!!

 

1๏ธโƒฃ parentNode ํ”„๋กœํผํ‹ฐ 

DOM ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋Š” ๋ฐ”๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ๋ถ€๋ชจ ๋…ธ๋“œ์— ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค. 

๋…ธ๋“œ.parentNode

 

2๏ธโƒฃ removeChild() ๋ฉ”์„œ๋“œ 

removeChild() ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฆ„์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ž์‹ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. 

 

 

 

* ์—ฐ์Šต๋ฌธ์ œ 2

์œ„์˜ ์—ฐ์Šต๋ฌธ์ œ์—์„œ ์ด์ œ li๋ฅผ ํด๋ฆญํ•˜๋ฉด ์‚ญ์ œ๊ฐ€ ๋˜๋„๋ก ๋งŒ๋“ค์–ด๋ณด๊ธฐ 

js ํด๋ฆญํ–ˆ๋”๋‹ˆ ์‚ญ์ œ๋จ

 

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Web Programming</title>
	<link rel="stylesheet" href="css/nodelist.css">
</head>
<body>
  <div id="container">
    <h1>Web Programming</h1>
    <p>๊ณต๋ถ€ํ•  ์ฃผ์ œ๋ฅผ ๊ธฐ๋กํ•ด ๋ณด์„ธ์š”. </p>
    <p>๊ณต๋ถ€๊ฐ€ ๋๋‚œ ๊ฒƒ์€ ํด๋ฆญํ•ด์„œ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p>
    <form action="">
      <input type="text" id="subject" autofocus>
      <button onclick="newRegister(); return false;">์ถ”๊ฐ€</button>
    </form>
    <hr>  
    <ul id="itemList"> </ul>  
  </div>

	<script>
    function newRegister() {
      var newItem = document.createElement("li");  // ์š”์†Œ ๋…ธ๋“œ ์ถ”๊ฐ€
      var subject = document.querySelector("#subject");  // ํผ์˜ ํ…์ŠคํŠธ ํ•„๋“œ
      var newText = document.createTextNode(subject.value);  // ํ…์ŠคํŠธ ํ•„๋“œ์˜ ๊ฐ’์„ ํ…์ŠคํŠธ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค๊ธฐ
      newItem.appendChild(newText);  // ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€

      var itemList = document.querySelector("#itemList");  // ์›น ๋ฌธ์„œ์—์„œ ๋ถ€๋ชจ ๋…ธ๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ 
      itemList.insertBefore(newItem, itemList.childNodes[0]);  // ์ž์‹ ๋…ธ๋“œ์ค‘ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ ์•ž์— ์ถ”๊ฐ€

      subject.value="";

      var items = document.querySelectorAll("li");
      for(i = 0; i < items.length; i++) {
        items[i].addEventListener("click", function() {
          if(this.parentNode) 
           this.parentNode.removeChild(this);
        })
      }
    }
	</script>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90