2021. 10. 22. 22:59ใHTML + CSS + JS
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๋ฅผ ํด๋ฆญํ๋ฉด ์ญ์ ๊ฐ ๋๋๋ก ๋ง๋ค์ด๋ณด๊ธฐ
<!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>