Js์ ํต์ฌ! : CRUD & event & DOM
| Link | |
| JavaScript CRUD Application - CRUD Operations With JavaScript | |
| https://youtu.be/KiRKUTDYlG8 |
Event ๊ฐ์ฒด
event๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ํด๋ฆญ๋ฒํผ์ ๊ตฌํํ๋ ๋ฐฉ์์ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="student-list">
<button class="student">Student 1</button>
<button class="student">Student 2</button>
<button class="student">Student 3</button>
</div>
<script src="test.js"></script>
</body>
</html>
//test.js
document.querySelector("#student-list").addEventListener("click", (e) => {
if (e.target.classList.contains("student")) {
console.log("ํ์ ๋ฒํผ ํด๋ฆญ");
}
});
event๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ ํ ์ ์์ผ๋ฉฐ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ์กฐ์ํ ์ ์๋ ์ฌ๋ฌ ํจ์๋ค์ด ์กด์ฌํ๋ค.
์ด๋ฒคํธ ๊ฐ์ฒด(Event object)๋ JavaScript์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋, ์ด๋ฒคํธ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํน๋ณํ ๊ฐ์ฒด์ด๋ค. ์ด๋ฒคํธ๋ ์น ํ์ด์ง์์ ๋ฐ์ํ๋ ๋ค์ํ ์ํฉ(์: ํด๋ฆญ, ๋ง์ฐ์ค ์์ง์, ํค๋ณด๋ ์ ๋ ฅ ๋ฑ)์ ๋ํ๋ด๋ฉฐ, ์ด๋ฒคํธ ๊ฐ์ฒด๋ ์ด๋ฌํ ์ด๋ฒคํธ์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์๋ค. ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ addEventListener ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ DOM ์์์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
DOM
DOM(Document Object Model)์ ์น ํ์ด์ง์ ๊ตฌ์กฐ์ ์ฝํ ์ธ ๋ฅผ ํํํ๊ณ ์กฐ์ํ๋ ๊ฐ์ฒด ๊ธฐ๋ฐ์ ์ธํฐํ์ด์ค์ด๋ค. DOM์ ๋ฌธ์์ ๊ฐ ์์(Element), ์์ฑ(Attribute), ํ ์คํธ ๋ฑ์ ๊ฐ์ฒด๋ก ํํํ๋ฉฐ, ์ด๋ฌํ ๊ฐ์ฒด๋ค์ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ฉฐ ํธ๋ฆฌ ํํ๋ก ๊ตฌ์ฑ๋๋ค. ๊ฐ์ฅ ์์์๋ document ๊ฐ์ฒด๊ฐ ์๊ณ , ์ด ๊ฐ์ฒด๋ฅผ ํตํด ๋ฌธ์ ์ ์ฒด์ ์ ๊ทผํ ์ ์๋ค. document ๊ฐ์ฒด๋ฅผ Js๋ฅผ ํตํด HTML ์์๋ฅผ ์ ํํ๊ณ , ์๋ก์ด ์์๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด ์์๋ฅผ ์์ , ์ญ์ ํ ์ ์๋ค.
- Create
document.querySelector("#student-form").addEventListener("submit", (e) => {
e.preventDefault();
//Get Form Values
const firstName = document.querySelector("#firstName").value;
const lastName = document.querySelector("#lastName").value;
const rollNo = document.querySelector("#rollNo").value;
//validate
if (firstName == "" || lastName == "" || rollNo == "") {
showAlert("Please fill in all fields", "danger");
}
else {
if (selectedRow == null) {//?
const list = document.querySelector("#student-list");
const row = document.createElement("tr");//?
// clearFields();
row.innerHTML =
`<td>${firstName}</td>
<td>${lastName}</td>
<td>${rollNo}</td>
<td>
<a href="#" class="btn btn-warning btn-sm edit">Edit</a>
<a href="#" class="btn btn-danger btn-sm delete">Delete</a>
</td>
`;
list.appendChild(row);
selectedRow = null;
showAlert("Student Added", "success")
}
else {
selectedRow.children[0].textContent = firstName;
selectedRow.children[1].textContent = lastName;
selectedRow.children[2].textContent = rollNo;
selectedRow = null;
showAlert("Student Info Edited", "info");
}
clearFields();
}
});
- Update
document.querySelector("#student-list").addEventListener("click", (e) => {//parent searching
// e.preventDefault();
//document.querySelector("#student-list")์ ์๋ ๋ฒํผ๋ค์ ์ง์ ํ๋ ๋ฐฉ์์๋ํ ์ฝ๋...
console.log("edit")
target = e.target;
if (target.classList.contains("edit")) {//child searching
selectedRow = target.parentElement.parentElement;
document.querySelector("#firstName").value = selectedRow.children[0].textContent;
document.querySelector("#lastName").value = selectedRow.children[1].textContent;
document.querySelector("#rollNo").value = selectedRow.children[2].textContent;
}
});
- Delete
document.querySelector("#student-list").addEventListener("click", (e) => {
// e.preventDefault();
target = e.target;
if (target.classList.contains("delete")) {
target.parentElement.parentElement.remove();//?
showAlert("Student Data Deleted", "danger");//=>Bootstrap
clearFields();
}
});